如果在当前目标中满足某些条件,我如何中止makefile继续其他目标。
例如:
Step01:
@# Do something
Step02: Step01_Output
@# Check that Step01_output meet certain condition, otherwise, abort
Step03: Step02
@# Do somethings (of course if did not abort in Step02)
# And so on
我尝试使用"退出"状态为0 ==>但它仍然继续! 我尝试使用"退出1"或其他存在状态==>它中止,但在输出时给出错误消息。 我想中止,但仍然没有在make调用shell时给出错误消息。 我也尝试从Step02设置env变量并环绕Step03,然后在if之后设置如下:
ifneq ($(ToAbort),1)
Step03:
...
StepN
endif
不幸的是,似乎make甚至没有查看条件,或者变量值没有在目标之间转移。
有什么想法吗?可能是通过添加额外的目标左右?
答案 0 :(得分:0)
我认为只有在创建所有目标或出现任何错误时才会退出。 顺便说一句,命令在子shell中运行,以便使用`exit'不会导致make退出。
答案 1 :(得分:0)
不确定你的想法是否正确。 将剔除工作留给 make 。
然而, 你可以用一些 shell 和递归的 make 来表达你的要求(对不起)。 你想表达"如果 a 完成有/没有错误,那么我们就完成了,否则继续 b 。"
Step01:
command1
command2
command3 && ${MAKE} Step02
command4
Step02:
cmd5
cmd6 && ${MAKE} Step03
⋮
请注意那些&符号。
if command3; then ${MAKE} Step02; fi
没有做你想做的事。
如果 make 失败,
你不想继续进入 command4 。
P.S。如果他们不是真实的文件,请不要忘记将这些步骤标记为PHONY。