我正在尝试编写一个makefile来替换用于构建相当大的应用程序的一个脚本。
当前脚本一次编译一个文件,使用make的主要原因是并行化构建过程。使用make -j 16
我目前在办公室服务器上获得了4倍的加速。
但我失去的是输出的一些可读性。文件的编译程序捆绑了一些工作,包括运行自定义预编译器和运行gcc
命令。这些步骤中的每一步都输出一些信息,我希望它能缓冲命令的输出,然后一次性显示整个批次。
是否可以让make
这样做?
答案 0 :(得分:3)
如果你升级到GNU make 4.0,那么你可以使用内置的输出同步功能来获得你想要的东西。
如果您不想升级,那么您必须修改每个配方,以便用管理输出的小程序进行包装。或者您可以将SHELL
变量设置为适合您的变量。搜索互联网应该给你一些例子。
答案 1 :(得分:1)
实现此目的的一种简单方法是将所有日志输出a发送到日志目录,每个文件都名为:
log_file_20131104_12013478_b.txt // log_file_<date>_<time>_<sequence letter>.txt
然后简单地cat
将它们作为依赖链中的最后一个make作业:
cat log_dir/log_file_20131104_12013478_*.txt > log_file_20131104_12013478.txt
答案 2 :(得分:0)
使用makepp这是您使用-j时的默认行为。收集所有单独的输出(以及输入dir消息),并在命令终止时一起输出。