使用多个作业运行make时编译器警告clobber

时间:2018-03-21 23:14:11

标签: c jenkins gnu-make

我在Windows上运行带有多个作业(-j4)的make。在构建结束时,我让Jenkins抓取控制台日志并收集编译器警告的数量和类型。问题(我认为)是多个make作业都具有相同的标准输出,所以偶尔(比你想象的更少)一个作业的输出被另一个作业的输出所破坏。例如:

ctc W549: D:\path\to\filename.c 10000/3 condition is always true
ctc W549: D:\path\to\file^ctc W588: D:\path\to\somefile.c dead assignment eliminated
name.c 10000/3 condition is always true

在上面的第2行中,我插入了一个插入符号,其中一个警告被切断。第3行是在第2行插入符号后的内容。

似乎所有作业都在不同时间将其stdout缓冲区刷新到控制台;有没有办法缓解这个?问题是警告刮刀在部分破坏的线上有问题。

一种选择是使用-j1,但我希望尽可能继续利用多个核心。

1 个答案:

答案 0 :(得分:1)

使用--output-sync选项。 GNU Make 4.0版本中添加了此功能。

根据GNU Make manual

  

--output-sync[=type]

     

确保每个配方的完整输出以一个不间断的顺序打印。此选项仅在使用--jobs选项同时运行多个配方时才有用(请参阅并行执行)如果没有此选项,将显示由配方生成的输出。