makefile命令出错

举报
yd_221104950 发表于 2020/12/03 00:05:09 2020/12/03
【摘要】 当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢? 演示例子: 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。