注意:这与生成的二进制代码的优化完全无关。
我有一个包含120多个源代码文件的项目。如果我将所有内容放入一个巨大的cpp文件中,代码的编译比运行标准的makefile构建要短得多,后者为每个cpp文件生成单独的g ++进程。 (我也注意到在cpp文件上运行g ++几乎是空的,或者根本就是空的,也需要一些时间,所以在相对较小的2个cpp文件上运行g ++比在包含代码的1个cpp文件上运行g ++要长得多两个)。
考虑到项目的大小,即使在非常快的硬件上,编译也需要很长时间。有没有什么可以做的,以加快编译器生成二进制文件所需的时间?鉴于为每个具有相同选项的cpp文件加载了g ++进程,我认为它为每个文件做了很多相同的工作(它肯定需要从某些库中加载某些东西,反复检查相同的东西等等) 。是不是有些东西可以让它跳过为每个文件重复执行“相同的任务”,以便更快地生成目标文件?
编辑:该项目是Qt应用程序,Makefile是使用qmake
答案 0 :(得分:2)
您是否尝试过并行编译?您可以添加-jN标志,其中N是编译线程数(通常是1.5 * cpu核心数)。
答案 1 :(得分:2)
您可以尝试一些事项:
.C
文件中包含相关的.cxx
个文件集,然后使用您的makefile进行编译。这样做的结果是将所有源代码放在一个文件中,而不会使代码更难阅读。答案 2 :(得分:1)
我知道gcc
的{{1}}缓存最接近的是ccache
,您可以在调用gcc
本身时使用它
ccache gcc [...]
但我建议您切换到make
或cmake
等建筑系统,因为这些软件能够跟踪不需要再次重新编译的依赖项和文件。 / p>
答案 3 :(得分:1)
有几件事要做:
如果我将所有内容放入一个巨大的cpp文件中,代码的编译比运行标准的makefile构建要短得多,后者为每个cpp文件生成单独的g ++进程。
最有可能的罪魁祸首是坏硬盘。通过获得超快速的ssd磁盘,您将看到巨大的改进。