【问题标题】:Determine if 'make' Command Fails in Bash Script确定 Bash 脚本中的“make”命令是否失败
【发布时间】:2021-06-07 17:27:10
【问题描述】:

具体来说:

make --directory=$1/build
if [ $? -eq 1 ]; then
   echo "Bad build"
   exit 1
else
   echo "Good build"
fi

当它实际失败时,它不会“失败”。如果重要的话...makefile 由 CMake 生成。

【问题讨论】:

  • 仅供参考,使用-q 退出 1 和 >1 用于任何其他故障是由make 的 POSIX 标准强制要求的,因此所有标准 make 的行为方式都是这样。一般来说,在 POSIX 中,测试准确的错误代码是错误的,除非您已阅读文档并希望区分不同的错误。假设有一种成功的方法和多种失败的方法,因此退出代码0 表示成功,而任何其他退出代码表示错误。如果您只想知道“它是否有效”,您应该比较 $? -ne 0(或下面答案中的 if-condition),而不是 $? -eq 1

标签: bash makefile cmake


【解决方案1】:

GNU make 手册页说(强调):

如果成功解析了所有 makefile 并且没有构建的目标失败,则 GNU make 退出状态为零。如果使用了 -q 标志并且 make 确定需要重建目标,则将返回状态 1。 如果遇到任何错误,将返回状态 2。

所以你需要检查$? -eq 2 来检测错误。

由于你没有使用-q,你也可以只检查退出状态是否为非零:

if make --directory="$1/build"
then
    echo "Good build"
else
    echo "Bad build"
    exit 1
fi

不要忘记引用 $1 以防它包含空格。

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2020-05-02
    • 2019-12-19
    • 2019-05-28
    • 2020-07-01
    • 2017-07-02
    • 2015-05-20
    • 2021-08-16
    相关资源
    最近更新 更多