Просто добавьте одну заметку: запись bash управляющих структур в рецепте - это немного запах кода ИМХО. Вещи всегда выглядят лучше, если заменить их на make идиом.
Другой запах здесь - когда вы врете make : ваш make-файл не говорит, что рецепт all
создает main.pdf
, например.
MAIN_FILE_PATH := main
.PHONY: other_things
other_things:
blah-dy-blah…
${MAIN_FILE_PATH}.pdf: | other_things
${MAIN_FILE_PATH}.pdf: ${MAIN_FILE_PATH}
cp $< $@
.PHONY: all
all: ${MAIN_FILE_PATH}.pdf
echo $@ Success
Так что же происходит, когда вы просите заставить сделать all
?
all
:
- предварительное условие: сделать необходимо построить
main.pdf
- предварительное условие: make builds
other_things
- рецепт:
main
копируется в main.pdf
- рецепт:
all Success
напечатано
Наличие main
проверяется make вместо bash .
Хорошей характеристикой этого является то, что вы можете легко добавить другой рецепт, если у вас есть программный способ создания main
.
Другая причина заключается в том, что копия не выполняется, если main.pdf
уже обновлен.
Так как вы больше не врете сделать ,
этот make-файл параллельно безопасен,
позволяя вам использовать флаг -j
n .
Привет производительность.