我正在使用GCC 4.7并编译我的C ++代码项目。代码由分布在目录中的文件组成。
在我使用的RHEL服务器上,有16个内核,编译速度仍然很慢。你能否提出makefile的可能替代方案或选项,这可能有助于快速编译。我试过-j但它只编译一些文件夹并停止;不编译主二进制文件。
我将不胜感激任何帮助。
答案 0 :(得分:5)
如果使用-j
进行编译时makefile失败但没有正常工作,则可能需要修复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
{{1}} }。