怎么提高 C++项目编译速度

2023-08-23 20:25:28 +08:00
 thiiadoewjwe

公司的 C++项目编译每次都要 30 分钟左右

自己最近在网上看,有发现类似的解决方案,比如谷歌的筛选重复头文件,还有一个付费加快编译的,还有 ccache 等

但是有没有 VS 可以直接拿来就用的加快编译的工具呢,或者大家是有什么巧妙的方法吗

从写代码来说,公司已经成屎山了,不会改代码的

4219 次点击
所在节点    程序员
43 条回复
ghostheaven
2023-08-24 04:11:39 +08:00
如果是 link 的时间长只能考虑增加内存和主频,其他的考虑 io 性能,搞个停产的傲腾说不定会快不少
Soo0
2023-08-24 04:15:13 +08:00
大力出奇迹?
Weixiao0725
2023-08-24 04:52:32 +08:00
make -j 8
xipuxiaoyehua
2023-08-24 08:34:27 +08:00
cmake 增量编译吧,每次从头开始编译是这样的
VDarker
2023-08-24 09:00:19 +08:00
incredibuild 效果很不错 就是付费
免费可以自己研究下 fast build 这个项目 开源的
cslive
2023-08-24 09:17:40 +08:00
大力出奇迹,加配置
kingzeus
2023-08-24 09:47:59 +08:00
水平扩容,并行编译
iamqk
2023-08-24 10:49:51 +08:00
预处理经常改的话就要移出来做普通文件
编译环境要用 ramdisk 提升 io 性能
lsongzhi
2023-08-24 10:55:06 +08:00
sccache + mold
bfdh
2023-08-24 10:58:26 +08:00
歪个楼,换台性能高的编译服务器。
FrankHB
2023-08-24 15:05:55 +08:00
VS 自带 IncrediBuild ,不过不顺手我不用。
然后是预编译头文件。
还有 mozilla 那种 unified build ,不过不是所有源码都能用。
剩下无非的加机器和 ramdisk 这种通用的,以及不要用太耗时间的优化(不过 cl/link 这块还好)。
限制 VS 其实多少得自求多福了。否则 gch/ccache/sccache 那套明显更舒服。GNU ld 特别慢还可以用 lld 或者 mold 。
@lance6716 要不得不用到自己魔改的 go toolchain 照样会吃亏。
DoWnH
2023-08-24 15:49:10 +08:00
Golang 的初衷之一就是解决 cpp 编译过慢的问题
encro
2023-08-24 17:00:46 +08:00
为啥没有人提架构上的那一套。Ninja 之类的?
还有就是模块化,没改动的就不编译?
已经 30 分钟,肯定是以上两种方法,以及多线程等方法能明显提效啊。

我是 C++入门选手,如果不对请告诉我。
gejigeji
2023-08-24 20:06:58 +08:00
make -j 128
yuruizhe
2023-08-24 20:39:26 +08:00
@tool2d 那直接用 C 不就好了,何必用 cpp
Thymolblue
2023-08-24 21:01:21 +08:00
歪个楼,目前的项目里引用了 Eigen3 ,编译时间直接增加了 5 分钟。看了一下 cpu 的消耗,只有一个核跑满了,其他核占用基本是 0 ,但是实际是配置了多核编译的。这种如何加速编译呢?
touchmii
2023-08-24 21:10:21 +08:00
先用 ninja 试一下能否提高编译速度,效果不明显就分析下源文件和模板文件的数量,判断编译时间主要消耗在哪里,如果 CPU 核心数加不了试一下 xmake 支持多分布式编译,把任务发送到多台主机编译,最后代码架构的前后关联性可能会影响多线程编译,这种情况就别折腾了,买个咖啡机比较合适。
8675bc86
2023-08-24 21:14:12 +08:00
啥项目编译一次 30 分钟,都没人想着加速??
这团队有点烂。
thiiadoewjwe
2023-08-24 22:37:07 +08:00
@8675bc86 国企,都瞎开发,还用的是 MFC
lixile
2023-08-25 13:50:31 +08:00
建议 回复代码量级 和目前的编译机器配置
上面已经说了很多了 我说个更原始的
如果 30 分钟内 机器并非满载 甚至负载不高 那就是编译脚本 makefile 或者 cmake 没有写好编译依赖导致的
其次是 第三方库全部拆出去预编译 不要重复编译
剩下的就是加配置 加 cache 之类的操作了
整套下来 需要相对系统的处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/967749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX