Вы должны перечислить все цели, которые должны быть поддельными, в качестве предпосылок для цели .PHONY
вместо того, чтобы просто писать .PHONY: %
.
.PHONY: %
не делает то, что вы думаете (т.е. превращает каждую цель в фальшивую цель ).
В качестве примера рассмотрим следующий make-файл:
.PHONY: %
foo:
@echo creating $@
@touch $@
Для этого make-файла выше:
$ make
creating foo
$ make
make: 'foo' is up to date.
Следовательно, цель foo
не превращается в фальшивую цель, если в вашем make-файле есть .PHONY: %
. В противном случае рецепт foo
был бы выполнен, поскольку фальшивые цели всегда устарели.