如何在makefile中使用同步?

时间:2015-08-23 07:30:55

标签: makefile gnu-make

来自docs

  

要避免这种情况,您可以使用--output-sync-O)选项。这个   选项指示make保存其调用的命令的输出   并在命令完成后打印所有内容。另外,如果   有多个并行运行的递归make调用,   他们会进行沟通,以便只有其中一人在a处产生输出   时间。



所以,给定一个makefile:

# A "recipe" that will always fail.
all::
    @foo bar baz



正在运行,我们得到:

# A "non-synchronized" run
$ make
make: foo: Command not found
makefile:3: recipe for target 'all' failed
make: *** [all] Error 127

# Synchronize!
$ make --output-sync
makefile:3: recipe for target 'all' failed
make: *** [all] Error 127



你能看到两次跑步之间的区别吗?

嗯,他们都失败了!

但是,在第一次运行中,让我们知道 为什么 它失败了,因为它“通过”来自配方的失败错误:< / p>

make: foo: Command not found

但是,对于第二次运行,我们得到的只有:

makefile:3: recipe for target 'all' failed
make: *** [all] Error 127

但是 为什么 ?为什么它会失败..是否有任何调试错误 - 从配方 - 它失败了?当然有!从第1次运行可见!那么,为什么要快速 隐藏 呢?

现在 - Make正在隐藏错误消息 - 我们所能做的就是:猜测!

我们在这里非常幸运,因为我们知道“foo ...”是一个无效的命令,所以 可能 ,某个地方,幕后,这个命令是因为这个原因,这是不可接受的。

但是,请考虑一下:

  • 想象一下,当你在命令中输入错误时?

  • 现在,想象一下复杂makefile中的拼写错误!

  • 现在,想象一下复杂的makefile中的拼写错误地递送!

  • 现在,想象一下makefile中长时间运行的所有内容,输出相当多的输出!

那么,如何让Make“隐藏”一些调试错误并向其他人展示呢?


版本说明: 支持同步的所有版本,因此:4.0及更高版本。)

1 个答案:

答案 0 :(得分:0)

我前几天在https://savannah.gnu.org/bugs/index.php?47365

打开了一个错误报告

现在应该修复http://git.savannah.gnu.org/cgit/make.git/commit/?id=14b2d7effb0afd75dfd1ed2534e331784f7d2977

我猜你可以从源代码构建最新版本,或等到他们再发布正式版本。我将从源码构建,因为我需要尽快解决这个问题:)