经过多年没有使用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。
答案 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
现在,在这两种情况下取得成功是错误的。