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

Posted

技术标签:

【中文标题】如何在没有错误消息的情况下中止makefile【英文标题】:How to abort makefile without error message 【发布时间】:2016-04-27 21:18:15 【问题描述】:

如果当前目标满足特定条件,我如何中止 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 的“退出” ==> 但它仍然继续! 我尝试使用“exit 1”或其他存在状态==>它中止,但在输出时给出错误消息。 我想中止,但在 make 调用 shell 时仍然没有给出错误消息。 我还尝试从 Step02 设置 env 变量并围绕 Step03 并在 if 之后检查如下:

ifneq ($(ToAbort),1) 
Step03:
...
StepN

endif

不幸的是,make 似乎连条件都没有看,或者变量值没有在目标之间传递。

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

【问题讨论】:

请提供一个真实的例子而不是伪代码,这可能是XY problem。 【参考方案1】:

我认为只有在创建所有目标或出现任何错误时才会退出。 顺便说一句,命令在子 shell 中运行,因此使用`exit' 不会导致 make 退出。

【讨论】:

【参考方案2】:

不确定您对此的想法是否正确。 将工作的剔除留给 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

附:如果它们不是真实文件,请不要忘记将这些步骤标记为 PHONY。

【讨论】:

以上是关于如何在没有错误消息的情况下中止makefile的主要内容,如果未能解决你的问题,请参考以下文章

Makefile 在没有任何消息的情况下停止

如何在没有错误消息的情况下调试 ctypes

Perl:如何在没有错误消息的情况下“死”?

如何在没有错误消息或异常的情况下调试 PowerShell 进程

如何在没有以下错误消息的情况下安装 ffmpeg-binaries?

如何在不中止 erl 的情况下中止 Erlang shell (erl) 中的接收语句?