У меня есть странный проект, когда во время сборки было создано несколько файлов. они относятся к числу других файлов, но имеют специальный сульфикс. (В отличие от нормального проекта, где всех файлов определенного типа означает, что они были сгенерированы автоматически)Makefile: Правило соответствия шаблону PHONY
, например:
тогда у меня есть шаблонное правило:
DATA=$(get string from template.txt)
%: %.tpl
sed 's/__TEMPLATE__/$(DATA)/g' $< > [email protected]
templates: src/fileB.js src/fileD.css
И все в порядке. До следующей сборки ... теперь src/fileB.js
не будет обновляться, потому что там уже есть, и src/fileB.js.tpl
не был изменен, хотя другой файл template.txt
, который я использую в качестве источника данных для его обновления. Это подводит меня к чистому шагу.
прямо сейчас мой чистый шаг rm
Ввод каждого файла. это уродливо.
.PHONY: clean
clean:
rm src/fileB.js
rm src/fileD.css
...
Вы можете видеть, как это становится уродливым.
В обычном проекте мой чистый будет всего rm *.o
, но здесь я не могу сделать rm *.js
, так как половина файлов не сгенерирована автоматически.
есть ли способ сделать правило %: %.tpl
be PHONY?
Если нет, есть ли способ подать список файлов с template
в clean
?
приятно! теперь мое правило 'templates' также более чистое с' templates: $ (GENERATED) '. большое спасибо! всегда забывайте о 'wildcard' – gcb
Необходимые вручную« чистые »шаги - это« запах кода »для make. Вам не нужно их иметь. Решение проблемы здесь заключается в использовании промежуточных файлов, которые * всегда * генерируются, а затем обновляют фактический файл .js, когда он отличается от промежуточного файла. Да, это немного дороже, но означает, что вы не можете забыть очистить и в итоге сломаться. –