gpt4 book ai didi

c++ - GCC 构建时间并没有从预编译的头文件中获得太多好处

转载 作者:IT老高 更新时间:2023-10-28 22:28:11 27 4
gpt4 key购买 nike

我有一个庞大的项目,大约 150 000 LOC 的 C++ 代码。构建时间大约是 15 分钟。本项目由多个不同规模的子项目组成。

我为每个子项目构建了单独的预编译头文件,但是当我使用它们时,构建时间大致保持不变。构建时间似乎减少了 5-10%,而不是更多。

肯定会使用预编译头文件,我使用 -Winvalid-pch 选项并且我尝试使用 -H 编译器选项进行编译,我的预编译头文件出现在输出中并带有 ' bang' 符号,表示编译器可以使用预编译头文件。

我所有的预编译头文件都不是很大,每个文件大约 50Mb。我用python脚本,找到here生成最常用的预编译头列表,所以我的预编译候选列表非常好。

是否有任何免费/开源工具可用于构建优化?似乎标准的 make 实用程序无法测量不同目标的构建时间。我找不到使用 make 获取不同目标的统计信息的方法。我不是在谈论依赖分析或高级的东西。我只想知道大部分时间都浪费在了哪些目标上。

此外,GCC 在处理预编译头文件方面似乎效率很低。我无法使任何子项目的构建速度显着加快,在一个构建时间为三分钟的项目上,我获得的最大加速是 20%。与在 linux 上使用 GCC 优化构建时间相比,购买更快的带有固态驱动器的机器似乎更容易且更便宜。

最佳答案

GCC build time doesn't benefit much from precompiled headers

是的,不幸的是,这通常是真的,

有一些实验项目可以做得更好,见 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3426.htmlhttp://gcc.gnu.org/wiki/pph ,但它们还不能使用。

我同意另一个答案,即 150KLOC 的 15 分钟非常慢。

我发现使用 Gold链接器对构建时间有很大的影响,我强烈推荐它。

您也可以考虑ccache这可以提供帮助,如果您在其他机器上有空闲周期 distcc

避免在慢速磁盘上构建,当然要避免网络磁盘。避免递归调用 make,这会花费更多时间阅读 makefile 和重新创建依赖关系图。如果您可以构建您的子项目 makefile 以便它们都可以包含在单个顶级 makefile 中,那么非递归 make 将需要更长的时间才能开始,但一旦开始构建目标就会运行。不过,重写 makefile 可能需要做很多工作。

这可能不言而喻,但是在多核机器上构建并使用 make -j N 一个好的经验法则是 N 应该是数字的两倍如果编译是 I/O 绑定(bind)的,则内核数量或更多。

关于c++ - GCC 构建时间并没有从预编译的头文件中获得太多好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com