Я полагаю, что иногда вам необходимо, чтобы файловые цели были предпосылками для целей PHONY
Большую часть времени, на самом деле. Считайте, что «стандартные» вещи:
.PHONY: all
all: myprog other_stuff
myprog: $(OBJECTS)
...
Но «Не объявлять файловые цели PHONY / Никакие файловые цели не должны быть предпосылками .PHONY» - это совсем другое. Это означает, что .PHONY: myprog
плохо и его следует избегать. Причина в том, что (1) он безусловно запускает восстановление myprog
, что ненормально; (2) это может ввести человека в заблуждение, что myprog
"не файл".
Если вам нужно принудительно восстановить myprog
, как только вы сделаете make -B myprog
. Если его действительно нужно перестраивать при каждом запуске, вы можете сделать:
myprog: $(OBJECTS) FORCE
...
FORCE:;
Или что-то в этом роде.
Насколько я понимаю, в этом случае единственная разница между только для заказа и не в том, если они появляются в $ ^ или в $ |
Предпосылки только для заказа редко используются расширения GNU. Нет необходимости вставлять их, чтобы показать, что «фальшивые вещи» на левой стороне будут перестроены в любом случае. Так что никто никогда не пишет all: | myprog
, хотя это будет работать так же хорошо, как all: myprog
.