如何让GNU明确testing失败?

经过多年不使用make,我发现自己需要它,现在的GNU版本。 我很确定我应该能够做我想做的,但还没有弄清楚怎么做,或者find了Google的答案等。

我试图创build一个testing目标,这将执行我的程序多次,将结果保存在一个日志文件。 一些testing应该会导致我的程序中止。 不幸的是,我的makefile在第一个导致错误的testing中放弃。 我有这样的东西:

# Makefile # test: myProg -h > test.log # Display help myProg good_input >> test.log # should run fine myProg bad_input1 >> test.log # Error 1 myProg bad_input2 >> test.log # Error 2 

通过以上步骤,在bad_input1运行之后退出,绝不会进入bad_input2运行。

如果你想要求目标失败的正确的解决scheme是否定其退出代码。

 # Makefile # test: myProg -h > test.log # Display help myProg good_input >> test.log # should run fine ! myProg bad_input1 >> test.log # Error 1 ! myProg bad_input2 >> test.log # Error 2 

现在,在这两种情况下取​​得成功是错误的。

放一个-在命令之前,例如:

 -myProg bad_input >> test.log 

GNU make将忽略进程退出代码。

尝试运行它

 make -i 

要么

 make --ignore-errors 

忽略了所有规则中的所有错误。

我也build议运行它

 make -i 2>&1 | tee results 

所以你得到了所有的错误和输出,看看发生了什么。

只是盲目地继续出现错误可能不是你真正想做的事情。 make实用程序本质上通常依赖于先前命令的成功完成,以便它可以使用这些命令的人为因素作为稍后执行的命令的先决条件。

顺便说一句,我强烈build议拿一本关于make的O'Reilly书 。 第一版对制作的基本性质有一个很好的概述,特别是其反向链接行为。 后来的版本仍然不错,但是第一版。 对实际发生的事情仍然有最清晰的解释。 事实上,我自己的副本是我第一件传给那些来问我关于make的“WTF?问题”的人! ( – :