makefile命令出错
【摘要】 当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢? 演示例子:
r1:r2 r3 echo 1
r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错
r21: echo 21
r3:r31 echo 3
r31: echo 31
1234567891011
我...
当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢?
演示例子:
r1:r2 r3 echo 1
r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错
r21: echo 21
r3:r31 echo 3
r31: echo 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
我们先看一下makefile的执行顺序:
~/Desktop/testdir$ make --just-print
echo 21
echo 2
cat tes.txt #tes.txt不存在,故意指定这条出错
echo 31
echo 3
echo 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
正常执行make命令:
~/Desktop/testdir$ make -s
21
2
cat: tes.txt: No such file or directory
makefile:4: recipe for target 'r2' failed
make: *** [r2] Error 1
- 1
- 2
- 3
- 4
- 5
- 6
参考:《makefile显示命令》
可以看出执行到r2目标发生错误后,就停止了后续其他目标的生成了。如何忽略r2目标生成出现的错误,继续生成其他目标呢?有以下几种方法:
- (1)在make命令后加上 -i 或者 --ignore-errors 参数,那么Makefile 中所有命令执行出现的错误都会被忽略。
// -s不输出命令,-i忽略错误
~/Desktop/testdir$ make -s -i
21
2
cat: tes.txt: No such file or directory
31
3
1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
从输出结果来看,忽略了r2执行出现的错误,继续生成后续的目标。
- (2)在make命令后加上 -k 或是 --keep-going ,意思是如果某规则中的命令出错了,那么就终止该规则的执行,但继续执行其它规则:
~/Desktop/testdir$ make -s -k
21
2
cat: tes.txt: No such file or directory
makefile:4: recipe for target 'r2' failed
make: *** [r2] Error 1
31
3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- (3)在Makefile 的命令行前加一个减号 - ,标记为忽略该命令执行出现的错误,如:
clean:
-rm -f *.o
- 1
- 2
将演示例子修改一下:
r1:r2 r3 echo 1
r2:r21 echo 2 -cat tes.txt #tes.txt不存在,故意指定这条出错
r21: echo 21
r3:r31 echo 3
r31: echo 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
执行编译:
~/Desktop/testdir$ make -s
21
2
cat: tes.txt: No such file or directory
31
3
1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
可以看出makefile命令在执行出现的错误被忽略了,后面的规则被顺利执行了。
- (4)用这个关键字.IGNORE声明目标,表示忽略其后命令执行出现的错,我们修改一下演示例子:
r1:r2 r3 echo 1
.IGNORE:r2
r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错
r21: echo 21
r3:r31 echo 3
r31: echo 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
执行编译:
~/Desktop/testdir$ make -s
21
2
cat: tes.txt: No such file or directory
31
3
1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
从执行结果来看,r2目标后面的命令执行出现的错误被忽略了。
注意:命令行前一定是Tab键。
谢谢阅读
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/103153977
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)