我正在使用 GCC 4.7 并编译我的 C++ 代码项目。代码由分布在目录中的文件组成。
在我使用的 RHEL 服务器上,有 16 个内核,但编译速度仍然很慢。您能否建议 makefile 的可能替代方案或选项,这可能有助于快速编译。我试过 -j 但它只编译一些文件夹并停止;不编译主二进制文件。
我将不胜感激任何帮助。
我正在使用 GCC 4.7 并编译我的 C++ 代码项目。代码由分布在目录中的文件组成。
在我使用的 RHEL 服务器上,有 16 个内核,但编译速度仍然很慢。您能否建议 makefile 的可能替代方案或选项,这可能有助于快速编译。我试过 -j 但它只编译一些文件夹并停止;不编译主二进制文件。
我将不胜感激任何帮助。
如果您的 makefile 在您编译时失败-j
但在没有时可以正常工作,那么您可能需要修复您的 makefile 以在并行编译中正常工作。否则,其他 15 个核心对您毫无用处。
经验不足的 makefile 编写者编写类似以下内容的情况并不少见:
final: step1 step2 step3
意思是“构建最终,首先构建 step1,然后 step2,然后 step3”。当您使用默认设置运行时,这可以正常工作,-j 1
因为make
碰巧以从左到右的顺序构建每个依赖项。但是,如果您使用-j 20
(比如说),那么它将尝试并行构建它们。它将尝试立即开始构建所有 3 个步骤,而无需先等待每个后续步骤完成。
正确的写法是:
final: step3
step3: step2
step2: step1
这make
准确地说明了正在发生的事情:构建final
你首先需要构建step3
你需要step2
的,你需要的step1
。