Почему.PHONY :нацелен, а не :.PHONY?

Я до сих пор не понимаю, почему «фальшивые» правила в файлах Makefile имеют «.PHONY» в качестве цели . Это было бы гораздо логичнее в качестве предпосылки .

Должен ли я уточнять это? Если Aзависит от Bи Bфальшиво, то Aтоже фальшиво. Таким образом, граф зависимостей .PHONYBAдовольно удивителен по сравнению с .PHONYBA. (Другой аргумент заключается в том, что реализация makeдолжна обрабатывать цель .PHONYочень особым образом.)

Хотя эта критика может показаться скорее теоретической (и бессмысленной)-«поскольку make такой древний, его синтаксис никуда не денется». Но я не предлагаю никаких изменений синтаксиса, есть альтернатива:

С GNU Make (по крайней мере )следующий Makefile объявляет фальшивымtarget_A:

target_A: _PHONY
        touch target_A

_PHONY:
        #noop

Вопрос 1:Это так просто и понятно, конечно, я не первый изобретатель. На самом деле, учитывая эту альтернативу, зачем makeпонадобился специальный синтаксис?

Мне кажется, что это также неплохо разрешило бы вопросы о подстановочных знаках в фальшивых целях и могло бы даже пролить некоторый свет на значение.PHONY , когда начинающие сомневаются.

Вопрос 2:Можете ли вы назвать какое-либо обстоятельство, в котором этот подход неэффективен? (Является ли вызов make.PHONYполезным?)

(Я должен упомянуть, что, хотя я вызывал другие makes,GNU Make — единственная реализация, в которой у меня есть некоторый опыт -чтения и написания файлов Makefile.)

7
задан Community 23 May 2017 в 12:08
поделиться