如何在没有错误消息的情况下中止makefile

时间:2016-04-27 21:18:15

标签: makefile gnu-make abort

如果在当前目标中满足某些条件,我如何中止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甚至没有查看条件,或者变量值没有在目标之间转移。

有什么想法吗?可能是通过添加额外的目标左右?

2 个答案:

答案 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。