【问题标题】:How to make Make *not* print "recipe for target failed?如何使 Make *not* print “目标配方失败?
【发布时间】:2012-09-01 23:54:45
【问题描述】:

我正在为一系列编译构建一个 Makefile,以显示用于与教程中的示例同步的渐进式输出差异。其中一些运行会生成错误代码,但由于这是“问题”定义的一部分,因此 make ("Makefile:15: recipe for target `run3' failed") 当目标失败有点碍事。

我知道忽略错误代码,但是否可以抑制该输出?最好在 Makefile 中。

类似地,是否可以禁止从 Makefile 中进入和离开子目录的消息(相当于“--no-print-directory”)?

而且,是的,我对 GNU Make 的回答很满意。

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    当然,经过一番谷歌搜索后,答案在GNU Make manual 中。特殊目标 .SILENT 和 .IGNORE 完全符合我的要求。

    【讨论】:

    • 他们做到了?两者似乎都没有关闭recipe for target blah/blah.foo failed 消息。
    • 是的,如果 .SILENT: 和 .IGNORE: 都在没有先决条件的情况下指定,则消息将被抑制。请注意,该消息似乎是在 3.82 之后添加的,它在 Cygwin 版本中,但不在官方 3.82 源中。该消息也出现在 4.0 版中。
    • 除了.IGNORE- 在配方行文本的开头(在初始选项卡之后)以及.SILENT 也适用于我。我的 GNU Make 版本是 4.1。
    【解决方案2】:

    为了实现你想要的,我会在 makefile 中使用 --silent --ignore-errors --no-print-directory GNU make 开关并将 stderr 重定向到 /dev/null (2>/dev/null) 命令

    【讨论】:

    • 我更喜欢可以在 Makefile 中使用的解决方案。
    • 设置MAKEFLAGS = --silent --ignore-errors --no-print-directory 有帮助吗?
    • 谢谢,杰克。不是真的,除非你可以从 Makefile 中设置它。我假设您的意思是环境变量?
    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2021-08-17
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多