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

gsi*_*011 7 diff makefile termination

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

diff:   *
        diff $(TEST)/T4.board $(TEST)/T4.board
        diff $(TEST)/T4.board $(TEST)/sample.board
Run Code Online (Sandbox Code Playgroud)

第一行没有问题,因为文件是相同的.第二行比较不同的文件,一旦显示差异,我明白了

Makefile:102: recipe for target `diff' failed
make: *** [diff] Error 1
Run Code Online (Sandbox Code Playgroud)

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

thi*_*ton 7

正如GNU在第5.5节"错误"所述的手动状态,您可以通过在命令前添加前缀来忽略命令的返回状态-:

diff:   *
    -diff $(TEST)/T4.board $(TEST)/T4.board
    -diff $(TEST)/T4.board $(TEST)/sample.board
Run Code Online (Sandbox Code Playgroud)


Eld*_*mov 6

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

diff:   *
    diff $(TEST)/T4.board $(TEST)/T4.board     || exit 0
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0
Run Code Online (Sandbox Code Playgroud)

可以用echo 'Files differ'而不是exit 0.