在不同文件上使用diff时,Makefile失败

时间:2012-03-11 17:34:43

标签: makefile diff termination

我的C ++项目的部分makefile使用diff命令来比较最近构建的代码输出的两个文件。问题是如果文件不同,脚本就不会失败并且应该继续。有更多的文件需要比较,我需要在构建脚本结束之前看到它们。例如,像这样,

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

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

2 个答案:

答案 0 :(得分:7)

当GNU在section 5.5 "Errors"中生成手动状态时,您可以通过在命令前加-来忽略命令的返回状态:

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

答案 1 :(得分:6)

让整个食谱不会返回错误:

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

可以使用echo 'Files differ'代替exit 0