运行并行make时出错

dim*_*mba 4 linux makefile compilation gnu-make

考虑以下make:

all: a b

a:
        echo a
        exit 1


b:
        echo b start
        sleep 1
        echo b end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

是否有一种方法可以在make执行结束时出现错误消息?

更新:

请参阅我的可能解决方案如何从make中检查make退出状态.

Flo*_*ade 5

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

# make
....
# echo $?
Run Code Online (Sandbox Code Playgroud)

0如果一切正常,将打印回声,如果不是,则打印其他内容.

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

make
if [ $? -eq 0 ]; then
    echo "Everything OK"
else
    echo "Something went wrong!"
fi
Run Code Online (Sandbox Code Playgroud)

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

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