Você pode fazer $ (curinga% / ** / *. C) em um makefile?
Como acompanhamento deessa questão, há mais um caso que não consegui descobrir em algumas horas de ajustes.
Aqui está a aparência do makefile atualmente:
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
A parte que adicionei sobre a grande resposta nessa outra pergunta é a%/lib/*.js
e%/lib/*.css
bem aqui:
%/build/build.js: %/index.js %/lib/*.js node_modules component.json
Isso parece funcionar bem se você tiver todos os arquivos necessários, o que significa que a estrutura de diretórios fica assim:
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
Com essa tarefa make atual, ele recria o subprojeto / pasta apropriado (página / pop-up / etc.) Se você alterar um arquivo dentro dessa pasta. no entantonão reconstruir se você estiverfaltando uma das dependências.
Por exemplo, na estrutura de pastas a seguir, o subprojeto "pop-up" será compilado corretamente (porque ainda possui todas as dependências de destino necessárias). No entanto, o subprojeto "page" nunca será criado, porque está faltando algum%/lib/*.js
arquivos:
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
Portanto, nessa situação, a única maneira de criar é se você tiver um%/index.js
e alguma correspondência de arquivo%/lib/*.js
.
Minha pergunta é: como você faz isso funcionar nos dois casos?
Basicamente, tudo que eu quero é reconstruir um subprojeto, se algum dos arquivosexceto aqueles em build / build.js mudança. Ou seja, se algum arquivo tiver alterado essenão corresponde ao nome do alvo, em seguida, execute a tarefa.
Como você faz isso?
Eu tentei isso:
%/build/build.js: %/**/*.js node_modules component.json
Mas que erros com isso:
make: Circular lib/page/build/build.js <- lib/page/build/build.js dependency dropped.
Porque corresponde ao nome do destino.
Parece também que pode ser possível usar$(filter pattern, text)
ou$(filter-out, pattern, text)
, mas não tive sucesso com isso.
%/build/build.js: $(filter-out %/build/build.js, %/**/*.js) node_modules component.json
Parecia que poderia incluir todos os arquivos correspondentes%/**/*.js
(tãolib/page/index.js
elib/page/lib/a.js
se isso estivesse presente) e exclualib/page/build/build.js
. Mas não tive sorte com isso, talvez esteja apenas usando incorretamente.
Como você faz isso funcionar?