如何让“make -j”生成更好的输出?

4
我有一个使用make构建的大型项目。由于项目规模和依赖关系的组织方式,使用make -j并行构建确实有很多好处。但是,make -j生成的输出(即日志和错误消息)都混在一起了,因为所有并行任务同时写入stdout。
我该如何告诉make将输出整理得好看些呢?理想情况下,我希望它能单独缓冲每个任务的日志,然后按顺序输出它们完成的顺序。是否有任何标准方法来做到这一点?
1个回答

4
您可以使用-O--output-sync命令行选项:

-O[type], --output-sync[=type]

在使用-j并行运行多个任务时,确保每个任务的输出聚合在一起,而不是与其他任务的输出混合在一起。如果未指定类型或目标,则将每个目标的整个配方输出组合在一起。如果类型为line,则将配方中每个命令行的输出组合在一起。如果类型为recurse,则递归make的所有输出都聚合在一起。如果类型为none,则禁用输出同步。

在线手册有更多信息。
(请注意,您需要GNU Make 4.0才能使用此功能。)

请注意,您必须使用GNU make 4.0或更高版本才能支持“-O”。在GNU make 3.x中不可用。 - MadScientist
@MadScientist:谢谢!已添加到我的答案中。 - mtvec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接