2012-03-11 102 views
6

我的C++项目的部分makefile使用diff命令来比较最近生成的代码输出的两个文件。问题是,如果文件不同,脚本你没有失败,应该继续。还有更多的文件需要比较,我需要在构建脚本结束之前查看它们。例如,这样的事情,在不同文件上使用diff时,Makefile失败

diff: * 
     diff $(TEST)/T4.board $(TEST)/T4.board 
     diff $(TEST)/T4.board $(TEST)/sample.board 

第一行不会导致问题,因为这些文件是相同的。第二行比较不同的文件,一旦显示差异,我看到

Makefile:102: recipe for target `diff' failed 
make: *** [diff] Error 1 

并且脚本停止。我怎样才能让它继续下去?

+0

'diff'应该在失败时返回成功0和1。问题是我如何处理失败?我只用了一个星期左右的makefile。 – gsingh2011 2012-03-11 18:00:29

回答

5

会让你的整个配方没有返回错误:

diff: * 
    diff $(TEST)/T4.board $(TEST)/T4.board  || exit 0 
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0 

人们可以使用echo 'Files differ',而不是exit 0

+0

谢谢,这两个选项的工作。我认为这是愚蠢的,虽然makefiles没有选择忽略错误。对于像'diff'这样的东西,返回1并不是世界的尽头,并且在每个diff的末尾加入exit 0会让人讨厌。 – gsingh2011 2012-03-11 18:19:02

+1

@ gsingh2011:Makefiles可以选择忽略错误。看到我的答案。 – thiton 2012-03-11 19:01:47

+0

@ gsingh2011噢,我忘了它,你可以在命令之前加一个减号('-')来忽略它的退出代码。见thiton的答案。 – 2012-03-11 19:02:46

7

随着GNU使手动国section 5.5 "Errors",您可以通过-前缀命令忽略一个命令的返回状态:

diff: * 
    -diff $(TEST)/T4.board $(TEST)/T4.board 
    -diff $(TEST)/T4.board $(TEST)/sample.board 
+0

+1,我忘了这种原生的方式来抑制GNU Make中的错误。 – 2012-03-11 19:06:14