Я до сих пор не понимаю, почему «фальшивые» правила в файлах Makefile имеют «.PHONY» в качестве цели . Это было бы гораздо логичнее в качестве предпосылки .
Должен ли я уточнять это? Если A
зависит от B
и B
фальшиво, то A
тоже фальшиво. Таким образом, граф зависимостей .PHONY
← B
→ A
довольно удивителен по сравнению с .PHONY
→ B
→ A
. (Другой аргумент заключается в том, что реализация make
должна обрабатывать цель .PHONY
очень особым образом.)
Хотя эта критика может показаться скорее теоретической (и бессмысленной)-«поскольку make такой древний, его синтаксис никуда не денется». Но я не предлагаю никаких изменений синтаксиса, есть альтернатива:
С GNU Make (по крайней мере )следующий Makefile объявляет фальшивымtarget_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
Вопрос 1:Это так просто и понятно, конечно, я не первый изобретатель. На самом деле, учитывая эту альтернативу, зачем make
понадобился специальный синтаксис?
Мне кажется, что это также неплохо разрешило бы вопросы о подстановочных знаках в фальшивых целях и могло бы даже пролить некоторый свет на значение.PHONY , когда начинающие сомневаются.
Вопрос 2:Можете ли вы назвать какое-либо обстоятельство, в котором этот подход неэффективен? (Является ли вызов make.PHONY
полезным?)
(Я должен упомянуть, что, хотя я вызывал другие make
s,GNU Make — единственная реализация, в которой у меня есть некоторый опыт -чтения и написания файлов Makefile.)