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.jselib/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?

questionAnswers(0)

yourAnswerToTheQuestion