ccache 是通过哈希编译输入复用目标文件来加速 C/C++ 重复编译的工具;需配置编译器调用方式(软链接或环境变量)、CMake 启动器参数,并优化缓存大小、命中率及路径稳定性。

ccache 是一个编译器缓存工具,能显著加快 C/C++ 项目的重复编译速度——尤其在频繁修改、反复构建的开发场景中。它的核心原理是:对每次编译输入(源码、宏定义、头文件内容、编译选项等)做哈希,若此前已编译过完全相同的输入,就直接复用之前生成的目标文件(.o),跳过实际编译过程。
安装与基础配置
大多数 Linux 发行版可通过包管理器安装:
- Ubuntu/Debian:sudo apt install ccache
- CentOS/RHEL:sudo yum install ccache 或 dnf install ccache
- macOS:brew install ccache
安装后需让构建系统调用 ccache 而非原始编译器。最常用方式是软链接或环境变量:
- 将 gcc、g++ 替换为 ccache 包装器(推荐):
ln -sf $(which ccache) /usr/local/bin/gcc
ln -sf $(which ccache) /usr/local/bin/g++ - 或通过环境变量(CMake 等工具更友好):
export CC="ccache gcc"
export CXX="ccache g++"
让 CMake 正确使用 ccache
CMake 从 3.4 版本起原生支持 ccache,启用方式简单可靠:
立即学习“C++免费学习笔记(深入)”;
- 在 cmake 命令中添加参数:
cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ... - 也可写入 CMakeLists.txt(不推荐全局硬编码,适合团队统一规范):
set(CMAKE_C_COMPILER_LAUNCHER "ccache")
set(CMAKE_CXX_COMPILER_LAUNCHER "ccache")
注意:必须在 project() 指令之前设置,否则无效。
优化缓存行为与清理策略
默认缓存路径为 ~/.ccache,大小限制约 5GB。日常开发建议主动调优:
- 增大缓存容量(例如设为 20GB):
ccache -M 20G - 查看缓存状态与命中率:
ccache -s(重点关注 cache hit rate,理想值应 >70%) - 定期清理低效缓存:
ccache -C(清空)或 ccache -c(按 LRU 清理至设定上限) - 避免因调试符号干扰命中(如频繁切换 -g):
可设置 export CCACHE_BASEDIR="/path/to/your/project",使相对路径更稳定
常见问题与绕过技巧
某些情况会导致缓存失效或误命中的典型场景:
- 时间戳敏感的宏(如 __DATE__、__TIME__)会破坏哈希一致性 → 编译时禁用:-frecord-gcc-switches 不影响,但需避免手动注入时间宏
- 绝对路径泄露(如头文件路径、-fdebug-prefix-map 或构建目录结构标准化
-
需要强制重编译某文件(如调试时怀疑缓存污染):
ccache -c && make target,或临时取消 launcher:
CC=gcc CXX=g++ make target
ccache 不改变编译逻辑,只加速重复构建;首次编译无收益,但后续迭代速度提升立竿见影。配合合理的构建目录管理和 clean 策略,可长期维持高命中率。











