温馨提示×

ubuntu gcc编译慢怎么优化

小樊
66
2026-10-06 23:45:57
栏目: 智能运维

在 Ubuntu 上用 gcc 编译慢,通常可以从编译参数、项目结构、工具链、硬件和系统几个层面来优化。下面按“见效快 → 根本优化”的顺序说明。


一、立竿见影的编译参数优化

1. 关闭不必要的优化(调试阶段)

gcc -O0

开发阶段不要开 -O2/-O3,会显著拖慢编译。

2. 使用 -pipe

避免中间文件落盘:

gcc -pipe

3. 合理使用 -j(并行编译)

如果是 Makefile:

make -j$(nproc)

CMake:

cmake --build build -j$(nproc)

4. 预编译头(PCH)

对 STL、大型头文件非常有效:

g++ -x c++-header stdafx.h -o stdafx.h.gch

二、减少头文件依赖(最重要)

1. 使用前置声明

class Foo;  // 而不是 #include "foo.h"

2. 减少 #include

  • 头文件里只放必要内容
  • 实现文件里 #include

3. 使用 include guard / #pragma once

#pragma once

4. 拆分大头文件

一个头文件 5000 行 = 每次都重编


三、使用更快的工具链 / 编译器

1. 使用 ccache(强烈推荐)

重复编译加速神器:

sudo apt install ccache
export CC="ccache gcc"
export CXX="ccache g++"

首次慢,之后飞快 ✅

2. 使用 clang

有时比 gcc 快很多:

sudo apt install clang
clang++ main.cpp

3. 使用 ninja(代替 make)

cmake -GNinja ..
ninja

比 Make 快 2–5 倍


四、CMake / 构建系统优化

1. 开启 CMake 并行

cmake -DCMAKE_BUILD_PARALLEL_LEVEL=$(nproc) ..

2. Unity Build(合并编译)

set(CMAKE_UNITY_BUILD ON)

大幅减少头文件解析

3. 分离 Debug / Release

cmake -DCMAKE_BUILD_TYPE=Release

五、硬件 & 系统层面

1. 使用 SSD(不是 HDD)

编译是 IO 密集型

2. 增加内存

不够会 swap,直接爆炸

3. 使用 tmpfs(谨慎)

mkdir /tmp/build && mount -t tmpfs tmpfs /tmp/build

六、诊断编译瓶颈

1. 看是否 CPU 满

htop

2. 看是否 IO 满

iostat -x 1

3. 测量单个文件

time g++ -c bigfile.cpp

七、常见“伪慢”原因

现象 原因
每次都全编 没用 ccache
改一行全项目重编 头文件依赖爆炸
make 不并行 没加 -j
WSL 特别慢 跨文件系统 IO

推荐组合(最优实践)

✅ Ubuntu + SSD
✅ gcc + ccache
✅ CMake + Ninja
✅ -j$(nproc)
✅ 头文件最小化


如果你愿意,可以告诉我:

  • 项目规模(文件数 / 代码量)
  • 用的是 make / cmake / bazel?
  • 是否 WSL?

我可以直接给你一套针对你项目的优化方案。

0 踩