Можете ли вы сделать $ (подстановочный знак% / ** / *. C) в make-файле?

Как продолжение доэтот вопросЕсть еще один случай, который я не смог выяснить за несколько часов работы.

Вот как сейчас выглядит make-файл:

output = $(shell find lib -type f -name '*build.js' -or -name '*build.css')
myth = ./node_modules/.bin/myth
duo = ./node_modules/.bin/duo

build: $(output)

%/build/build.js: %/index.js %/lib/*.js node_modules component.json
  @mkdir -p '$(@D)'
  @$(duo) '$*'/index.js > '$@'

%/build/build.css: %/index.css %/lib/*.css node_modules component.json
  @mkdir -p '$(@D)'
  @$(duo) '$*'/index.css | $(myth) > '$@'

node_modules: package.json
  @n 0.11.13
  @npm install
  @touch node_modules # make sure folder is updated later than package.json

Часть того, что я добавил в ответ на отличный ответ на этот вопрос,%/lib/*.js а также%/lib/*.css Прямо здесь:

%/build/build.js: %/index.js %/lib/*.js node_modules component.json

Это выглядит нормально, если у вас есть все необходимые файлы, то есть структура каталогов выглядит следующим образом:

component.json
lib/
lib/page/
lib/page/build/
lib/page/build/build.js
lib/page/index.js
lib/page/lib/
lib/page/lib/a.js
lib/page/lib/b.js
lib/popup/
lib/popup/build/
lib/popup/build/build.js
lib/popup/index.js
lib/popup/lib/
lib/popup/lib/a.js
lib/popup/lib/b.js
node_modules/
package.json

С этой текущей задачей make она перестраивает соответствующий подпроект / папку (page / popup / etc.), Если вы изменяете файл внутри этой папки. Тем не менее, этоне восстановить, если выотсутствует одна из зависимостей.

Например, в следующей структуре папок подпроект «всплывающее» будет работать нормально (поскольку он все еще имеет все необходимые целевые зависимости). Тем не менее, подпроект «страница» никогда не будет построен, потому что он отсутствует какой-либо%/lib/*.js файлы:

component.json
lib/
lib/page/
lib/page/build/
lib/page/build/build.js
lib/page/index.js
lib/popup/
lib/popup/build/
lib/popup/build/build.js
lib/popup/index.js
lib/popup/lib/
lib/popup/lib/a.js
lib/popup/lib/b.js
node_modules/
package.json

Таким образом, в этой ситуации, единственный способ построить это, если у вас есть%/index.js и некоторое соответствие файла%/lib/*.js.

Мой вопрос, как вы заставляете это работать в обоих случаях?

По сути, все, что я хочу, это перестроить подпроект, если какой-либо из файловкроме тех, что в build / build.js менять. То есть, если какой-либо файл изменился,не соответствует названию цели, затем запустите задачу.

Как ты это делаешь?

Я попробовал это:

%/build/build.js: %/**/*.js node_modules component.json

Но это ошибки с этим:

make: Circular lib/page/build/build.js <- lib/page/build/build.js dependency dropped.

Потому что это соответствует целевому имени.

Также кажется, что возможно использовать$(filter pattern, text) или же$(filter-out, pattern, text), но я не был успешным с этим.

%/build/build.js: $(filter-out %/build/build.js, %/**/*.js) node_modules component.json

Казалось, что он может включать в себя все файлы, соответствующие%/**/*.js (такlib/page/index.js, а такжеlib/page/lib/a.js если это присутствовало), и просто исключитьlib/page/build/build.js, Но мне не повезло с этим, может быть, я просто неправильно его использую.

Как вы получаете это на работу?

Ответы на вопрос(0)

Ваш ответ на вопрос