假设我有一个 makefile:
.RECIPEPREFIX = +
.ONESHELL:
all: one
vars := one.a two.a three.a
.INTERMEDIATE: $(vars)
one: $(vars)
+ touch $@
%.a: %.b
+ touch $@
%.b:
+ if [ "$@" = "three.b" ];
+ then
+ exit 1;
+ fi
+ touch $@
并且所有目标都需要很长时间才能完成。 如果一切顺利,则不会保留任何中间体(显式或隐式定义)。这很好。
但是,假设一个目标发出错误信号。即使没有为它们发出错误信号,Makefile 也会停止并删除所有中间目标。
当 make 并行运行时,这个问题的变体甚至更加烦人。
如何防止删除成功创建的中间目标?
如果我没理解错的话,这就是
.SECONDARY
的用途。
您可以在此处阅读更多信息:https://www.gnu.org/software/make/manual/html_node/Special-Targets.html,也可以在此处:https://www.gnu.org/software/ make/manual/html_node/Chained-Rules.html