前言:之前以为主要是操作系统的问题导致编译速度的差异,使用了 wsl
后编译速度虽然有提高但是还是很慢,因此要继续想办法优化编译速度。在编译的过程中发现除了我修改的主要的代码外,其他的库文件以及一些不知道是什么的文件重复编译导致大量时间的浪费。又因为不知道这些文件有什么用因此不敢轻易将这些文件删除,故采用编译缓存的方式来提高文件的编译速度。
以下是使用 ccache 加速 GCC/G++ 编译的 详细步骤 和 注意事项,适用于 Ubuntu/WSL 等 Linux 环境:
1. 安装 ccache
1 2 3 4 5
| # 更新软件包列表(确保获取最新版本) sudo apt update
# 安装 ccache 工具 sudo apt install ccache
|
2. 配置编译器别名(临时生效)
在当前终端会话中,临时设置 ccache
包装 GCC/G++:
1 2 3 4 5
| # 设置环境变量:让系统在调用 gcc 时实际使用 ccache 包装的 gcc export CC="ccache gcc"
# 设置环境变量:让系统在调用 g++ 时实际使用 ccache 包装的 g++ export CXX="ccache g++"
|
验证环境变量是否生效:
1 2 3
| # 验证环境变量是否生效 echo $CC # 应输出 "ccache gcc" echo $CXX # 应输出 "ccache g++"
|
3. 永久生效配置(推荐)
(1) 修改全局环境变量
编辑 ~/.bashrc
或 ~/.zshrc
(根据你的 Shell):
1 2
| # 编辑 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc) vim ~/.bashrc
|
在文件末尾添加:
1 2 3 4 5
| # 强制所有 gcc 调用走 ccache export CC="/usr/lib/ccache/gcc"
# 强制所有 g++ 调用走 ccache export CXX="/usr/lib/ccache/g++"
|
保存后加载配置:
1 2
| # 保存文件后,加载配置使其立即生效 source ~/.bashrc
|
(2) 或创建符号链接(更彻底)
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 创建符号链接,将 gcc/g++ 指向 ccache(需要管理员权限)
# 任何地方调用 gcc 都会先走 ccache sudo ln -s /usr/bin/ccache /usr/local/bin/gcc
# 任何地方调用 g++ 都会先走 ccache sudo ln -s /usr/bin/ccache /usr/local/bin/g++
# 覆盖 cc 编译器别名 sudo ln -s /usr/bin/ccache /usr/local/bin/cc
# 覆盖 c++ 编译器别名 sudo ln -s /usr/bin/ccache /usr/local/bin/c++
|
优先级检查:
1 2
| # 验证优先级 which gcc # 应显示 /usr/local/bin/gcc(表示符号链接生效)
|
4. 验证 ccache 工作
(1) 手动编译测试
1 2 3 4 5
| # 使用 ccache 编译一个测试文件 ccache gcc -o test test.c # 直接调用 ccache
# 或者(如果配置了环境变量/符号链接) gcc -o test test.c # 隐式通过 ccache
|
(2) 查看缓存统计
1
| ccache -s # 显示缓存命中率、缓存目录等信息
|
输出示例:
1 2 3 4 5 6 7 8 9 10 11 12
| # 缓存存储位置 cache directory /home/user/.ccache # 主配置文件 primary config /home/user/.ccache/ccache.conf secondary config (readonly) /etc/ccache.conf # 直接命中缓存次数 cache hit (direct) 0 # 预处理后命中次数 cache hit (preprocessed) 0 # 未命中次数(需重新编译) cache miss 1 ...
|
- **
cache miss
**:首次编译未命中缓存,后续重复编译会显示 cache hit
。
5. 在构建系统中使用
(1) CMake 项目
在 CMakeLists.txt
或配置时指定编译器:
1 2 3
| # 方法1:通过环境变量传递 # 在配置阶段指定编译器 CC="ccache gcc" CXX="ccache g++" cmake ..
|
或直接启用 ccache
支持:
1 2
| # 方法2:在 CMake 命令中直接启用 ccache cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccake ..
|
(2) Makefile 项目
修改 Makefile
的编译器变量:
1 2 3 4 5 6
| # 修改 Makefile 中的编译器变量 # 覆盖默认的 gcc CC = ccache gcc
# 覆盖默认的 g++ CXX = ccache g++
|
6. 高级配置(可选)
(1) 调整缓存大小(默认 5GB)
1 2
| # 设置缓存最大为 10GB(默认 5GB) ccache --set-config=max_size=10G # 设置为 10GB
|
(2) 清空缓存
(3) 缓存存储路径
默认在 ~/.ccache
,可通过环境变量修改:
1 2
| 设置缓存存储到指定路径(默认在 ~/.ccache) export CCACHE_DIR=/path/to/your/cache
|