调整编译器参数提升效率
很多人在开发时遇到编译卡顿,尤其是项目一变大,每次改动都要等几分钟。其实第一步可以检查编译器是否开启了优化选项。比如使用 GCC 或 Clang 时,去掉不必要的 -g 调试信息,或者在开发阶段关闭 -O2 级别的优化,能明显缩短单次编译时间。
如果是 CMake 项目,可以临时切换为 Debug 模式而非 RelWithDebInfo,减少额外处理。等要发布时再切回去。
用 ccache 缓存中间结果
重复编译相同文件是常见瓶颈。ccache 能缓存已经编译过的源文件结果,下次直接复用。安装后简单配置:
export CC="ccache gcc"
export CXX="ccache g++"之后运行 make 或 ninja 就会自动走缓存。第一次可能没感觉,第二次修改代码时,你会发现很多文件秒过。
并行编译充分利用 CPU
现代电脑基本都是多核 CPU,但有些人还在用默认的单线程编译。加个 -j 参数就能跑满资源。比如:
make -j8数字可以设成 CPU 核心数的 1.5 倍左右,太多反而会因为内存或磁盘争抢拖慢整体进度。如果不知道核心数,Linux 下可以用 nproc 查看。
拆分大型项目结构
一个文件改了,整个项目重编?这通常是模块划分不清导致的。把功能拆成独立库,通过静态或动态链接组合。这样改某个模块,只重新编译对应部分。例如把网络层、工具类各自做成子模块,配合 CMake 的 add_library 使用,能大幅减少无效编译。
升级硬件存储更有效
别小看硬盘的影响。传统机械硬盘读写几千个小文件时,寻道时间能把编译拖到崩溃。换成 SSD 后,尤其是 NVMe 固态,加载头文件、写入目标文件的速度提升非常明显。身边有同事换了 M.2 固态,Android 项目全量编译从 12 分钟降到 4 分钟。
使用 distcc 分布式编译
如果你有多台机器空闲,比如局域网里的几台开发机,可以用 distcc 把编译任务分出去。主机关掉本地编译器负载,把源码发给其他机器处理,结果拿回来合并。配置好后,相当于把编译能力翻了几倍。
当然,网络延迟和共享文件系统(如 NFS)的稳定性会影响效果,建议内网千兆以上环境使用。
避免频繁包含大头头文件
某些头文件一引入就带进几百个其他声明,比如 Windows.h 或某些大型框架的总入口头文件。这种“大杂烩”会让预处理器反复解析大量无关内容。解决办法是尽量前向声明(forward declaration),只在必要时才包含完整头文件。
比如在 .cpp 文件里包含复杂头文件,而不是写在 .h 里让所有人跟着拖累。