在 Ubuntu 上用 gcc 编译慢,通常可以从编译参数、项目结构、工具链、硬件和系统几个层面来优化。下面按“见效快 → 根本优化”的顺序说明。
gcc -O0
开发阶段不要开 -O2/-O3,会显著拖慢编译。
-pipe避免中间文件落盘:
gcc -pipe
-j(并行编译)如果是 Makefile:
make -j$(nproc)
CMake:
cmake --build build -j$(nproc)
对 STL、大型头文件非常有效:
g++ -x c++-header stdafx.h -o stdafx.h.gch
class Foo; // 而不是 #include "foo.h"
#include#include#pragma once#pragma once
一个头文件 5000 行 = 每次都重编
ccache(强烈推荐)重复编译加速神器:
sudo apt install ccache
export CC="ccache gcc"
export CXX="ccache g++"
首次慢,之后飞快 ✅
clang有时比 gcc 快很多:
sudo apt install clang
clang++ main.cpp
ninja(代替 make)cmake -GNinja ..
ninja
比 Make 快 2–5 倍
cmake -DCMAKE_BUILD_PARALLEL_LEVEL=$(nproc) ..
set(CMAKE_UNITY_BUILD ON)
大幅减少头文件解析
cmake -DCMAKE_BUILD_TYPE=Release
编译是 IO 密集型
不够会 swap,直接爆炸
mkdir /tmp/build && mount -t tmpfs tmpfs /tmp/build
htop
iostat -x 1
time g++ -c bigfile.cpp
| 现象 | 原因 |
|---|---|
| 每次都全编 | 没用 ccache |
| 改一行全项目重编 | 头文件依赖爆炸 |
| make 不并行 | 没加 -j |
| WSL 特别慢 | 跨文件系统 IO |
✅ Ubuntu + SSD
✅ gcc + ccache
✅ CMake + Ninja
✅ -j$(nproc)
✅ 头文件最小化
如果你愿意,可以告诉我:
我可以直接给你一套针对你项目的优化方案。