Gre*_*att 62 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
Run Code Online (Sandbox Code Playgroud)
使用上面的命令,在bad_input1运行后退出,永远不会运行bad_input2.
小智 119
-
在命令之前加上一个,例如:
-myProg bad_input >> test.log
Run Code Online (Sandbox Code Playgroud)
然后GNU make将忽略进程退出代码.
Rob*_*lls 30
尝试运行它
make -i
Run Code Online (Sandbox Code Playgroud)
要么
make --ignore-errors
Run Code Online (Sandbox Code Playgroud)
它会忽略所有规则中的所有错误.
我也建议将其作为
make -i 2>&1 | tee results
Run Code Online (Sandbox Code Playgroud)
这样你就得到了所有的错误和输出,看看发生了什么.
只是盲目地继续发生错误可能不是你真正想做的事情.make实用程序本质上通常依赖于先前命令的成功完成,以便它可以使用这些命令的假象作为稍后执行的命令的先决条件.
顺便说一下,我强烈建议您获取O'Reilly的一本关于make的书.第一版对制作的基本性质有一个很好的概述,特别是它的反向链接行为.后来的版本仍然很好,但第一版.仍然有最清楚的解释实际发生了什么.事实上,我自己的副本是我第一个传递给那些来找我询问有关制作的"WTF?问题"的人!( - :
tri*_*eee 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
Run Code Online (Sandbox Code Playgroud)
现在,在这两种情况下取得成功是错误的.