linux - 运行并行 make 时出错

标签 linux compilation makefile gnu-make

考虑以下品牌:

all: a b

a:
        echo a
        exit 1


b:
        echo b start
        sleep 1
        echo b end

当以 make -j2 运行它时,我收到以下输出:

echo a
echo b start
a
exit 1
b start
sleep 1
make: *** [a] Error 1
make: *** Waiting for unfinished jobs....
echo b end
b end

我们有一个很大的 make 文件,很容易错过错误,因为在执行结束时没有错误消息。

有没有办法让错误消息也出现在 make 执行的结尾

更新:

查看我可能的 solution如何从 make 中检查 make 退出状态。

最佳答案

如果make 调用的任何程序返回错误,make 的返回码将不会为零。因此,在调用 make 之后,您可以只检查返回代码以查看是否发生了错误。在 bash(以及许多其他 shell,如 zsh)上,您可以执行以下操作:

# make
....
# echo $?

如果一切正常,echo 将打印 0,否则将打印其他内容。

您还可以从 shell 脚本中运行检查:

make
if [ $? -eq 0 ]; then
    echo "Everything OK"
else
    echo "Something went wrong!"
fi

如果您需要确切的错误消息,最简单的方法是将 make 的输出重定向到某个文件,如果执行失败则使用 grep 获取错误信息。

但我通常这样做的方式是并行运行 make 并在出现问题时使用 -j1 重新执行它,这样我会得到一条干净的错误消息.我想这可以使用上述技术放入 shell 脚本中。

关于linux - 运行并行 make 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971615/

相关文章:

CPU占用显示100%

android - 使用 Android Studio 和 adb 将 android 5.0.2 手机连接到 Fedora 21

linux - 如何仅使用 shell 命令编辑文件以保持相同长度的行

php - MySQL查看列名大小写

c# - Mod_Color.cs(55,55) : Error CS0241: Default parameter specifiers are not permitted (CS0241) (Assembly-CSharp)

android - 提供的jar依赖不起作用

c++ - 如何在 iOS 上编译 fftw3

c++ - Makefile 不允许我为目标文件指定目录

c++ - 如何在 C++ 中使用 FANN

c# - 保护客户的 VS2015 解决方案