考虑以下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执行的 end 中?
更新:
请参阅我的可能solution如何从make中检查退出状态。
答案 0 :(得分:5)
如果make
调用的任何程序返回错误,则返回代码make
将不为零。因此,在调用make
之后,您可以检查返回代码以查看是否发生了错误。在bash
(以及许多其他类似zsh
的shell)上,您可以执行以下操作:
# make
....
# echo $?
如果一切正常,echo将打印0
,如果不是,则会打印其他内容。
您也可以从shell脚本中运行检查:
make
if [ $? -eq 0 ]; then
echo "Everything OK"
else
echo "Something went wrong!"
fi
如果您需要确切的错误消息,最简单的方法是将输出从make
重定向到某个文件,如果执行失败则将错误重定向到grep
。
但我通常这样做的方法是并行运行make
并使用-j1
重新执行它,如果出现问题,我将收到一条干净的错误消息。我想这可以使用上面的技术放入shell脚本中。
答案 1 :(得分:0)
您所看到的是这两项任务的输出都是独立的。因此,如果你并行运行5个任务,其中3个给出了错误,那么很可能它们会被其他任务的输出所穿插。
最好的办法是一起运行一组串行任务,将错误输出发送到文件中......并在退出时将其打印到屏幕上。
P.S。 - 此外,除非绝对存在错误,否则永远不要在任务中使用退出1!