【问题标题】:Makefile failing when using diff on different files在不同文件上使用差异时 Makefile 失败
【发布时间】:2012-03-11 17:34:43
【问题描述】:

我的 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

脚本停止。我怎样才能让它继续?

【问题讨论】:

  • diff 应该在成功时返回 0,在失败时返回 1。问题是我如何应对失败?我只用了一周左右的 makefile。

标签: makefile diff termination


【解决方案1】:

正如section 5.5 "Errors" 中的GNU make 手册所述,您可以通过在命令前加上- 来忽略命令的返回状态:

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

【讨论】:

  • +1,我忘记了这种在 GNU Make 中抑制错误的原生方式。
【解决方案2】:

让你的整个配方不返回错误:

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

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

【讨论】:

  • 谢谢,这两个选项都有效。尽管makefile没有忽略错误的选项,但我认为这有点愚蠢。对于 diff 这样的事情,返回 1 并不是世界末日,在每个差异的末尾添加退出 0 会很烦人。
  • @gsingh2011:Makefile 确实可以选择忽略错误。看我的回答。
  • @gsingh2011 哦,我忘了,你可以在命令前加一个减号(-)来忽略它的退出代码。请参阅 thiton 的回答。
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多