编译多个C++;一起归档还是分开归档 对于大型C++项目,最好是在一个G++的大调用中编译所有CPP文件,或者将它们单独编译,然后将结果或可能的东西链接在一起(例如,同时编译名称空间/模块/子目录的所有文件)。

编译多个C++;一起归档还是分开归档 对于大型C++项目,最好是在一个G++的大调用中编译所有CPP文件,或者将它们单独编译,然后将结果或可能的东西链接在一起(例如,同时编译名称空间/模块/子目录的所有文件)。,c++,compilation,C++,Compilation,实际的区别是什么?哪种方法最快?为什么?显然,如果您使用的是多核或多CPU系统,并行启动多个编译器进程将提高CPU使用效率。然而,整个项目的主要瓶颈仍然是链接器,它实际上必须从所有对象文件创建一个可执行文件 除此之外,这实际上取决于项目本身。这些文件之间有多少依赖关系?哪些需要先编译?最好让构建系统为您做出这些决定。显然,如果您在多核或多CPU系统上,并行启动多个编译器进程将提高CPU使用效率。然而,整个项目的主要瓶颈仍然是链接器,它实际上必须从所有对象文件创建一个可执行文件 除此之外,这实际上

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

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


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

显然,如果您在多核或多CPU系统上,并行启动多个编译器进程将提高CPU使用效率。然而,整个项目的主要瓶颈仍然是链接器,它实际上必须从所有对象文件创建一个可执行文件


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

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

file1.cpp
file2.cpp
... 
fileN.cpp
然后可以创建“master.cpp”文件:

并编译它

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

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


当然,瓶颈是“聚集”操作链接阶段。有一个黄金链接器()可以解决ELF文件的问题。

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

file1.cpp
file2.cpp
... 
fileN.cpp
然后可以创建“master.cpp”文件:

并编译它

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

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


当然,瓶颈是“聚集”操作链接阶段。有一个黄金链接器()可以解决ELF文件的问题。

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


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

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



事实上,出于上述原因,大多数时候都是使用这种方法来准备makefile的。

当您使用代码和机器进行尝试时,发生了什么?哪一个对你来说最快?嗯,我的项目的当前状态太小,不能产生很大的差异。然而,这个项目将会发展,因此我想马上正确地完成它。当你用你的代码和机器尝试它时,发生了什么?哪一个对你来说最快?嗯,我的项目的当前状态太小,不能产生很大的差异。但是,项目将不断增长,因此我希望立即正确地完成它。另外,请记住,第一次运行将不同于后续运行。通常情况下,“一体机”在第一次编译时会更快,但是如果您只做了一次更改,单独的文件的编译速度将明显快于“一体机”文件。当然,这是为了稳定的“发布版”重建所有文件,其中没有输入错误或小的更改。此外,在使用单个文件的情况下,多次调用“gcc”的开销也会减少。但是应用程序执行代码的速度提高(这是最终目标,不是吗?)是不可忽略的。哪一个可以产生更快的应用程序?这两种方法不应该最终产生相同的代码吗?@gexicide:链接器在优化方面有困难,所以“一体机”通常会稍微快一点。但我认为差别很小,大多数人认为它不值得一个“合一”文件的麻烦。记住,第一次运行将不同于后续的运行。通常情况下,“一体机”在第一次编译时会更快,但是如果您只做了一次更改,单独的文件的编译速度将明显快于“一体机”文件。当然,这是为了稳定的“发布版”重建所有文件,其中没有输入错误或小的更改。此外,在使用单个文件的情况下,多次调用“gcc”的开销也会减少。但是应用程序执行代码的速度提高(这是最终目标,不是吗?)是不可忽略的。哪一个可以产生更快的应用程序?这两种方法不应该最终产生相同的代码吗?@gexicide:链接器在优化方面有困难,所以“一体机”通常会稍微快一点。但是我认为差别很小,大多数人认为它不值得一个“合一”文件的麻烦。好吧,但是不需要所有的头文件,然后经常阅读?在“一起编译”方法中,像这样经常使用的头文件只读取一次,对吗?这不是很重要吗?我不确定gcc在使用另一种方法时只读取一次标题,也找不到任何说明这一点的文档。但是,在一个大的项目设置中,如果您经常更改一些文件并进行构建,那么差异是显著的。如果是一个编译过程,那么头文件应该只调用一次,因为它们通常由ifndef/define directivesokay保护,但不是所有必需的头文件都会更频繁地读取吗?在“一起编译”方法中,像这样经常使用的头文件只读取一次,对吗?这不是很重要吗?我不确定gcc在使用另一种方法时只读取一次标题,coul