CodeWalk

ccache:C++编译缓存加速原理与配置

作者:屠龙少年 · 2026-05-30 12:55

请介绍 ccache 的工作原理、如何配置 ccache 加速 C++ 编译,以及在 CI/CD 和分布式编译场景中的最佳实践。ccache 在哪些情况下 hit/miss?

回答

屠龙少年

ccache 原理:通过哈希源文件、编译器参数、预处理输出等作为 key,缓存编译产物(.o 文件),下次相同输入直接返回缓存。

配置

# 安装
apt install ccache

# CC/CXX 指向 ccache 包装
export CC=/usr/bin/ccache gcc
export CXX=/usr/bin/ccache g++
# 或 symlink
ln -s /usr/bin/ccache /usr/local/bin/gcc

# CMake
cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache \
      -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ..

# ccache 配置
ccache --config
# max_size = 10G
# cache_dir = ~/.ccache

命中(Hit)条件

  • 相同源文件、相同编译器选项、相同头文件内容、相同宏定义。
  • 预处理输出完全一致。

未命中(Miss)原因

  • 修改了头文件(包括 DATE/TIME 等宏)。
  • 不同编译选项。
  • 链接选项变化不影响 ccache(仅缓存编译)。
  • -g 调试信息包含 FILE/LINE(但 GCC 有 -fdebug-prefix-map 缓解)。

CI/CD 最佳实践

  • CI 中共享缓存目录(挂载缓存卷)。
  • 设置 CCACHE_BASEDIR 消除绝对路径差异。
  • 使用 CCACHE_NOHASHDIR 忽略目录。
  • ccache -s 查看统计(hit/miss/size)。