我正在尝试编写一个生成文件来替换用于构建一个相当大的应用程序的脚本之一。
当前脚本一次编译一个文件,使用 make 的主要原因是并行化构建过程。使用make -j 16
我目前在我们的办公服务器上获得了 4 倍的加速。
但是我失去的是输出的一些可读性。文件的编译程序捆绑了一些工作,包括运行自定义预编译器和运行gcc
命令。这些步骤中的每一个都会输出一些信息,我希望它可以缓冲命令的输出,然后一次性显示全部内容。
有可能make
做到这一点吗?
如果你升级到 GNU make 4.0,那么你可以使用内置的输出同步功能来得到你想要的。
如果您不想升级,则必须修改每个配方,以使用管理输出的小程序进行包装。或者您可以将SHELL
变量设置为可以为您执行此操作的内容。搜索互联网应该会给你一些例子。
完成此操作的一种简单方法是将所有日志输出发送到日志目录,其中每个文件命名为:
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
使用makepp,这是您使用 -j 时的默认行为。一旦命令终止,所有单独的输出(和输入目录消息)都会被收集并一起输出。