От docs:Make удаляет мою цель. Зачем?
Обычно, когда выходит из строя рецепт линии, если она изменила целевой файл на всех, файл поврежден и не может быть использован - или, по крайней мере, это не полностью обновлена. Тем не менее, временная метка файла говорит, что теперь это значение до , так что в следующий раз «make» запускается, он не будет пытаться обновить этот файл. Ситуация такая же, как когда оболочка убита сигналом; * note Прерывания ::. Поэтому в целом правильная вещь - удалить целевой файл , если рецепт завершился с ошибкой после начала изменения файла. «make» будет делать это, если «.DELETE_ON_ERROR» появляется как цель. Это почти всегда то, что вы хотите «сделать», но это не исторический практика; поэтому для совместимости вы должны явно запросить его.
Итак, вот у меня есть Makefile:
# The idea here is to auto-generate the file ('make.include')
# and to use it as a makefile.
# For simplicity, I replaced the "auto-generate" part, with "touch".
# I also simplified the dependency-tree with 'phony'.
# In practice, we re-generate, only when "need" to.
make.include : phony
+touch '[email protected]'
make -f '[email protected]'
.PHONY: phony
Продолжительность:
$ make -q
я получаю:
touch 'make.include'
make: *** Deleting file 'make.include'
Теперь, я не вижу, как предотвратить make от удаления этого вновь созданного автоматически «make.include» (который вполне может быть довольно дорогостоящим процессом s для повторного запуска), если я не прибег к специальной цели .PRECIOUS
.
Но, требуя, чтобы пользователь явно определял свои «драгоценные» цели, не соответствует этой цитате из приведенных выше документов. Правильно?