0

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

实际的区别是什么?哪种方法最快,为什么?

4

3 回答 3

4

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

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

于 2012-05-22T19:32:26.517 回答
1

有个窍门。假设你有一堆文件

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

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

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

并编译它。

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

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

而且,当然,瓶颈是“聚集”操作——链接阶段。有一个 GOLD 链接器(维基百科)可以解决 ELF 文件的问题。

于 2012-05-22T19:23:23.663 回答
0

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

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

于 2012-05-22T19:21:21.807 回答