http://tech.ddvip.com/2009-02/1234335520108248.html
减少基于 C/C++ 的系统的编译时间是所有发布和编译工程师所面对的主要挑战之一。本文研究一些可通过并行活动来加快编译过程的开源工具选项:将编译过程分布到本地网络中的多台机器上。本文中的讨论主要集中于 GNU make,因为它使用比较广泛。
GNU make 中的 –j 选项
默认情况下,make 是一个顺序工作的工具。它按次序调用底层编译器来编译 C/C++ 源。通常,C/C++ 源文件(通常带有 .cpp/.cxx 扩展名)不需以对方为基础即可编译。使用 –j 选项调用 make 来完成该操作。清单 1 显示的是一种典型的用法。
清单 1. 典型的 GNU make 调用
make –j10 –f makefile.x86_linux
–j -- 10 的参数是编译过程开始后能同时进行的最大编译数。如果没有给 -j 提供任何参数,则所有源文件都会在系统中排队,等待同时编译。在运行多核系统上的编译时,使用 -j 选项特别有用。要使用 -j 选项,必须先解决几个关键问题;这些问题将在下面部分讨论。
使用 –j 选项时的问题和可能的解决方案
首先要检查系 统配置。在低内存(<512MB RAM)系统上,同时编译的数量太多会因为分页而使系统变慢。在这种情况下会增加编译时间。您需要进行试验以得出系统的最佳 -j 值。另一种选择是使用 GNU make 工具的 –l 或 –load-average 选项,同时也使用 -j(它只在系统负载小于一定水平时才触发作业)。
还可以使用同一个临时文件进行独立编译。请考虑清单 2 中所示的 make 代码片段。
...