公司的 C++项目编译每次都要 30 分钟左右
自己最近在网上看,有发现类似的解决方案,比如谷歌的筛选重复头文件,还有一个付费加快编译的,还有 ccache 等
但是有没有 VS 可以直接拿来就用的加快编译的工具呢,或者大家是有什么巧妙的方法吗
从写代码来说,公司已经成屎山了,不会改代码的
![]() | 1 tool2d 2023-08-23 20:37:36 +08:00 少用模板,模板到后期就是会拉垮编译速度。 把 C++当成 C 来用,编译速度原地起飞。 |
![]() | 2 ysc3839 2023-08-23 20:39:38 +08:00 via Android VS 的话应该默认就有增量编译?确认一下编译时是单独编译了有改动的文件,还是怎样?以及是在编译 obj 时慢还是链接时慢? |
![]() | 3 cleveryun 2023-08-23 20:45:13 +08:00 via Android mark 一下,最近开始接触一个 c++项目,之前一直写 web 前端。 |
![]() | 4 edimetia3d 2023-08-23 20:50:06 +08:00 道理上就是分布式, 预编译, 预链接, 缓存. 项目构建系统需要开发和 IT 一起来维护了, 容易吃力不讨好的. 以前用过 incredibuild, 全公司开发机都强制贡献至少 1 个核, 好像不错. linux 下都是开发服务器了, 256 core 2T 内存起步, 大力出奇迹. |
![]() | 5 HannibaI 2023-08-23 20:50:15 +08:00 ![]() ccache/sccache distcc unity build precompiled header |
6 framlog 2023-08-23 20:51:07 +08:00 楼上很全了 |
![]() | 7 Puteulanus 2023-08-23 21:00:00 +08:00 ccache 感觉不错,编译 OpenWrt 的时候第二遍重复编译比第一遍快老多了 |
8 zzzkkk 2023-08-23 21:03:45 +08:00 via Android @edimetia3d linux 都是开发服务器 什么意思? |
![]() | 9 edimetia3d 2023-08-23 21:13:54 +08:00 @zzzkkk 就是直接用一个很强的服务器做开发机, 几十个人共用. |
![]() | 10 pengtdyd 2023-08-23 21:23:21 +08:00 重构,用新技术 |
![]() | 11 jmc891205 2023-08-23 22:06:05 +08:00 我们都是分布式编译 提交到集群上编译 |
12 allAboutDbmss 2023-08-23 22:12:19 +08:00 借楼问一下: rust 有这些 cmake 的问题吗? |
13 richangfan 2023-08-23 22:35:30 +08:00 上双路 EPYC |
14 cnbatch 2023-08-23 22:51:16 +08:00 @allAboutDbmss 编译速度关 cmake 什么事? |
![]() | 15 ivvei 2023-08-23 23:02:59 +08:00 慢一般就慢在模板上…… |
![]() | 16 yaott2020 2023-08-23 23:32:43 +08:00 via Android 正在等 rust 编译顺便来刷刷 v 站 |
![]() | 17 yaott2020 2023-08-23 23:33:03 +08:00 via Android 小项目,等 debug 启动中。。。 |
![]() | 18 lance6716 2023-08-23 23:36:08 +08:00 via Android 打开 v 站搜索“我为什么放弃 go”,看看编译速度快是一件多么微不足道的小事来平衡一下 |
![]() | 19 learningman 2023-08-24 01:55:37 +08:00 via Android @allAboutDbmss rust 有神奇的 build.rs |
![]() | 20 dangyuluo 2023-08-24 04:01:16 +08:00 IWYU 去掉重复投文件,然后就是模版不要太多层。有人说 forward declaration ,但是我觉得加快的速度无法冲抵带来的麻烦。 |
21 ghostheaven 2023-08-24 04:11:39 +08:00 如果是 link 的时间长只能考虑增加内存和主频,其他的考虑 io 性能,搞个停产的傲腾说不定会快不少 |
![]() | 22 Soo0 2023-08-24 04:15:13 +08:00 via iPhone 大力出奇迹? |
![]() | 23 Weixiao0725 2023-08-24 04:52:32 +08:00 ![]() make -j 8 |
![]() | 24 XiaoyehuaDev 2023-08-24 08:34:27 +08:00 via iPhone cmake 增量编译吧,每次从头开始编译是这样的 |
25 VDarker 2023-08-24 09:00:19 +08:00 incredibuild 效果很不错 就是付费 免费可以自己研究下 fast build 这个项目 开源的 |
26 cslive 2023-08-24 09:17:40 +08:00 大力出奇迹,加配置 |
27 kingzeus 2023-08-24 09:47:59 +08:00 水平扩容,并行编译 |
![]() | 28 iamqk 2023-08-24 10:49:51 +08:00 预处理经常改的话就要移出来做普通文件 编译环境要用 ramdisk 提升 io 性能 |
29 lsongzhi 2023-08-24 10:55:06 +08:00 sccache + mold |
30 bfdh 2023-08-24 10:58:26 +08:00 歪个楼,换台性能高的编译服务器。 |
![]() | 31 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 照样会吃亏。 |
32 DoWnH 2023-08-24 15:49:10 +08:00 Golang 的初衷之一就是解决 cpp 编译过慢的问题 |
![]() | 33 encro 2023-08-24 17:00:46 +08:00 为啥没有人提架构上的那一套。Ninja 之类的? 还有就是模块化,没改动的就不编译? 已经 30 分钟,肯定是以上两种方法,以及多线程等方法能明显提效啊。 我是 C++入门选手,如果不对请告诉我。 |
34 gejigeji 2023-08-24 20:06:58 +08:00 make -j 128 |
36 Thymolblue 2023-08-24 21:01:21 +08:00 via Android 歪个楼,目前的项目里引用了 Eigen3 ,编译时间直接增加了 5 分钟。看了一下 cpu 的消耗,只有一个核跑满了,其他核占用基本是 0 ,但是实际是配置了多核编译的。这种如何加速编译呢? |
![]() | 37 touchmii 2023-08-24 21:10:21 +08:00 via Android 先用 ninja 试一下能否提高编译速度,效果不明显就分析下源文件和模板文件的数量,判断编译时间主要消耗在哪里,如果 CPU 核心数加不了试一下 xmake 支持多分布式编译,把任务发送到多台主机编译,最后代码架构的前后关联性可能会影响多线程编译,这种情况就别折腾了,买个咖啡机比较合适。 |
38 8675bc86 2023-08-24 21:14:12 +08:00 啥项目编译一次 30 分钟,都没人想着加速?? 这团队有点烂。 |
![]() | 39 thiiadoewjwe OP @8675bc86 国企,都瞎开发,还用的是 MFC |
![]() | 40 lixile 2023-08-25 13:50:31 +08:00 建议 回复代码量级 和目前的编译机器配置 上面已经说了很多了 我说个更原始的 如果 30 分钟内 机器并非满载 甚至负载不高 那就是编译脚本 makefile 或者 cmake 没有写好编译依赖导致的 其次是 第三方库全部拆出去预编译 不要重复编译 剩下的就是加配置 加 cache 之类的操作了 整套下来 需要相对系统的处理 |
![]() | 41 lixile 2023-08-25 13:52:16 +08:00 @Thymolblue 盲猜 传递的给 eigen3 的编译命令 是 make 而不是 make -j8 -j16 之类的 也不是正统学院 or 工程派的 $(MAKE) 其实看看 jobserver 有没有提示报错 或者 warn 基本上就能有结论 |
42 8675bc86 2023-08-25 14:45:23 +08:00 @thiiadoewjwe MFC 赢了,还不提桶跑路,MFC 编译加速不好搞。 |
43 chji5471 2023-08-25 17:35:51 +08:00 我们项目是自动生成几个 cpp 文件,然后 cpp 文件包含具体实现的 cpp 文件,感觉能加快不少 |