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

Compiling multiple C++ files together versus sepearately

本文关键字:编译 单独 在一起 C++ 文件      更新时间:2023-10-16

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

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

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

实际上,出于上述原因,大多数时间都使用此方法准备makefile。

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

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

然后,您可以创建"master.cpp"文件:

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

并编译它。

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

如果你在UNIX上,使用"时间"来获取gcc调用的执行时间。

当然,瓶颈是"聚集"操作 - 链接阶段。有一个黄金链接器(维基百科)可以解决ELF文件的这个问题。

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

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