如何让GNU明确测试失败?

时间:2010-02-02 22:49:52

标签: makefile gnu-make

经过多年没有使用make,我发现自己需要它,现在是gnu版本。我很确定我应该能够做我想做的事情,但是没有弄清楚如何,或者找到谷歌的回答等等。

我正在尝试创建一个测试目标,它会多次执行我的程序,将结果保存在日志文件中。一些测试应该导致我的程序中止。不幸的是,我的makefile在第一次测试时中止,导致错误。我有类似的东西:

# 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。

3 个答案:

答案 0 :(得分:120)

在命令前加上-,例如:

-myProg bad_input >> test.log

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

答案 1 :(得分:30)

尝试将其作为

运行
make -i

make --ignore-errors

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

我还建议将其作为

运行
make -i 2>&1 | tee results

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

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

BTW我高度建议您获取the O'Reilly book on make的副本。第一版对制作的基本性质有一个很好的概述,特别是它的反向链接行为。后来的版本仍然很好,但第一版。仍然有最清楚的解释实际发生了什么。事实上,我自己的副本是我第一个传递给那些来找我询问有关制作的“WTF?问题”的人! ( - :

答案 2 :(得分:16)

如果您想要让目标失败,那么正确的解决方案是否定其退出代码。

# 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

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