来自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及更高版本。)
答案 0 :(得分:0)
我前几天在https://savannah.gnu.org/bugs/index.php?47365
打开了一个错误报告现在应该修复http://git.savannah.gnu.org/cgit/make.git/commit/?id=14b2d7effb0afd75dfd1ed2534e331784f7d2977
我猜你可以从源代码构建最新版本,或等到他们再发布正式版本。我将从源码构建,因为我需要尽快解决这个问题:)