GNU make:不要在其他地方发生错误时删除中间文件

问题描述 投票:0回答:1

假设我有一个 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 并行运行时,这个问题的变体甚至更加烦人。

如何防止删除成功创建的中间目标?

makefile gnu-make
1个回答
0
投票

如果我没理解错的话,这就是

.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

© www.soinside.com 2019 - 2024. All rights reserved.