4

考虑以下品牌:

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 执行结束时也出现错误消息?

更新:

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

4

2 回答 2

5

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

# make
....
# echo $?

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

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

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

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

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

于 2012-06-11T03:45:31.580 回答
0

您所看到的是这两个任务的输出是独立的。因此,如果您正在并行运行 5 个任务,其中 3 个出现错误,那么它们很可能会被其他任务的输出所穿插。

最好的办法是一起运行一组串行任务,将它们的错误输出发送到一个文件中......并在退出时将其打印到屏幕上。

PS - 另外,除非绝对有错误,否则切勿在任务中使用 exit 1!

于 2012-06-10T19:26:18.663 回答