在 CentOS 上 C++ 编译慢,通常不是单一原因,而是 编译器、构建方式、系统资源、代码规模 等多个因素叠加。下面从 常见原因 → 可操作优化方案 系统说明。
top
htop
iostat -x 1
常见现象:
make 时 CPU 很低 → 单线程编译cc1plus 占满 CPU → 编译本身慢make -j$(nproc)
或:
make -j$(($(nproc) + 1))
⚠️ 不要无脑 -j32,内存不足会反而更慢。
ccache(强烈推荐)效果:第二次编译可快 5~10 倍
yum install -y ccache
export CC="ccache gcc"
export CXX="ccache g++"
make -j$(nproc)
或 CMake:
cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ..
检查是否生效:
ccache -s
| 编译器 | 速度 | 建议 |
|---|---|---|
| gcc | 慢 | 默认 |
| clang | 快 | ✅ 推荐 |
| sccache | 更快 | 大规模 CI |
yum install -y clang
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
yum install -y ninja-build
cmake -G Ninja ..
ninja
✅ Ninja 自动并行,调度更高效
典型慢点:
boost, Eigen, fmt✅ 优化:
// 头文件
class A {
public:
void foo();
};
// cpp
void A::foo() {}
-O0 -g -DDEBUG
-O2 -DNDEBUG
⚠️ -O3 会显著增加编译时间
-O1
避免过度内联:
-fno-inline
mkdir /ramdisk
mount -t tmpfs tmpfs /ramdisk
然后:
cd /ramdisk
cmake ..
make
✅ 对 IO 敏感项目效果明显
yum install -y centos-release-scl
yum install -y devtoolset-11
scl enable devtoolset-11 bash
dnf install -y gcc-toolset-12
适合:
#include <vector> 等CMake 示例:
target_precompile_headers(myapp PRIVATE <vector> <string>)
cmake --build build -j$(nproc)
✅ 是否已并行编译
✅ 是否使用 ccache
✅ 是否使用 Ninja
✅ 是否头文件爆炸
✅ 是否 IO 或内存瓶颈
✅ 是否 GCC 太老
ccache + clang + ninja + -j$(nproc)
tmpfs + sscache + ninja
如果你愿意,可以直接告诉我:
我可以给你一个 针对你项目的具体优化方案。