一起编译多个C ++文件而不是单独编译

时间:2012-05-22 19:18:14

标签: c++ compilation

对于大型C ++项目,最好是在g ++的一次大调用中编译所有cpp文件,或者单独编译它们然后链接结果或者中间的某些东西(比如一次编译命名空间/模块/子目录的所有文件) )。

实际差异是什么?哪种方法最快,为什么?

3 个答案:

答案 0 :(得分:4)

单独编译文件然后链接是更好的做法,因为它允许您在修改时仅重新编译受影响的文件。因此,在第一次构建之后,构建时间最小化。

实际上,出于上述原因,使用这种方法大部分时间都会准备好makefile。

答案 1 :(得分:1)

有一个技巧。假设你有一堆文件

file1.cpp
file2.cpp
... 
fileN.cpp

然后你可以创建“master.cpp”文件:

#include "file1.cpp"
#include "file2.cpp"
...
#include "fileN.cpp"

并编译它。

通过这种方式,您可以轻松地比较单个文件和文件堆的构建时间。

如果您使用的是UNIX,请使用“time”来获取gcc调用的执​​行时间。

当然,瓶颈是“聚集”操作 - 连接阶段。有一个GOLD链接器(wikipedia)可以解决这个ELF文件。

答案 2 :(得分:0)

显然,并行启动多个编译器进程将导致更高效的CPU使用率,因为您使用的是多核或多CPU系统。然而,整个项目的主要瓶颈仍然是实际上必须从所有目标文件创建可执行文件的链接器。

除此之外,它实际上取决于项目本身。文件之间有多少依赖关系?哪些需要先编译?你最好让你的构建系统为你做出决定。