【问题标题】:Conditionally do make distclean有条件地做 distclean
【发布时间】:2022-01-04 04:06:04
【问题描述】:

作为具有set -e 的bash 脚本的一部分,我执行make distclean,如果我在调用脚本之前运行了distclean,显然会失败并出现以下错误:

make: *** No rule to make target 'distclean'. Stop

有没有办法进行 distclean 并且不会失败如果没有要清理的东西

【问题讨论】:

标签: bash gnu-make autotools


【解决方案1】:

如果您对正在打印的错误消息感到满意,并且只想忽略失败并继续前进,一个常见的习惯用法是附加 || :

这里的一般语法是cmd1 || cmd2。如果cmd1 失败,则运行cmd2: 是始终成功的命令的(异常)名称,因此|| : 具有忽略第一个命令的退出代码的效果。

make distclean || :

如果您不想看到错误消息,可以先检查Makefile 是否存在:

if [[ -e Makefile ]]; then make distclean; fi

【讨论】:

  • 如果不够用2>/dev/null>/dev/null 2>&1 也可以忽略错误消息。
  • 因为 Makefile 既是配置(而不是 dist-cleaned)项目的最具特色的工件,也是与错误最直接相关的文件,测试是否存在在执行make distclean 之前执行该文件似乎是避免 OP 描述的错误的正确做法。
  • 我不想接受|| 的未知错误。我更喜欢-e Makefile 选项。谢谢约翰。
【解决方案2】:

你可以做一个

make distclean || echo "(Error from make ignored)"

明确正在发生的事情。

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多