sccache 编译器缓存指南:3分钟装好,重复编译直接跳过
2026/9/20 14:28:30 网站建设 项目流程

sccache 编译器缓存指南:3分钟装好,重复编译直接跳过

【免费下载链接】sccacheSccache is a ccache-like tool. It is used as a compiler wrapper and avoids compilation when possible. Sccache has the capability to utilize caching in remote storage environments, including various cloud storage options, or alternatively, in local storage.项目地址: https://gitcode.com/GitHub_Trending/sc/sccache

sccache 是一款类 ccache 的编译器缓存工具。它作为编译器的前置包装器,能跳过重复编译,把结果存到本地磁盘或远程存储,再按需取回。下面的内容只讲两件事:怎么最快装好,怎么真正让缓存生效。

3分钟快速上手 🚀

每个平台一条命令,装完跑一遍sccache --version就算通过。

Linux(需要 Rust 工具链):

cargo install sccache --locked sccache --version

macOS(Homebrew):

brew install sccache sccache --version

Windows(Scoop 或 Chocolatey 二选一):

scoop install sccache sccache --version

✅ 看到版本号输出,就说明装好了,后面所有配置都建立在这一步之上。

选哪种安装方式

别纠结装法,按你的场景对号入座就行:

场景推荐方式一句话理由
日常开发包管理器(brew / scoop / cargo install)一条命令搞定,升级也方便
CI 流水线包管理器 + 固定缓存目录环境干净,配合缓存持久化命中率最高
企业受管机器源码编译后走内部分发无外部依赖,符合管控要求
离线环境有网机器上先cargo build --release,把产物拷过去离线机装不了包管理器

提示:源码编译只选需要自定义特性或受限环境时才做,普通场景没必要。各编译器的支持范围可以看 src/compiler/ 目录,里面每种编译器一个文件。

构建系统对接

Rust(Cargo)

Cargo 提供了RUSTC_WRAPPER钩子,指给 sccache 即可。之后每次cargo build都会自动走缓存,不用改任何构建脚本。

export RUSTC_WRAPPER=sccache cargo build --release sccache --show-stats

长期项目可以写进项目的.cargo/config.toml,就不用每次 export 了。详见 docs/Rust.md。

CMake

CMake 3.4 起支持编译器启动器,configure 时加两个参数就行。MSVC 用户注意把调试信息设为 Embedded(/Z7),否则 PDB 缓存会失效。

cmake -DCMAKE_C_COMPILER_LAUNCHER=sccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -B build

想写进工程,就在 CMakeLists.txt 里find_program后设置同样的 launcher 变量。

Makefile

Makefile 没有原生钩子,把编译器变量包一层 sccache 是最直接的办法。这样每个目标文件的编译都会经过缓存。

CC = sccache gcc CXX = sccache g++

Autotools 同理,exportCC/CXX再跑./configure即可。

让缓存真正生效 📊

核心变量就下面几个,集中记这一张表,其他地方不用再重复:

变量作用示例值
SCCACHE_DIR本地缓存目录~/.cache/sccache
SCCACHE_CACHE_SIZE本地缓存上限,默认 10G20G
SCCACHE_DIRECT开启预处理器级直接缓存,速度更快true
SCCACHE_ERROR_LOG错误落盘到文件,便于排查/tmp/sccache.log
SCCACHE_LOG日志级别,排查时开debugdebug
RUSTC_WRAPPER让 Cargo 把编译交给 sccachesccache

两个进阶项各一句话带过:团队共享缓存可指向 Redis 或 Memcached(SCCACHE_REDIS_ENDPOINTSCCACHE_MEMCACHED_ENDPOINT),S3/GCS/Azure 等云存储也在 docs/Configuration.md 中列全;CI 只读复用已有缓存时,把对应后端的RW_MODE设为READ_ONLY即可。

踩坑与排查 ⚠️

Q1:缓存不命中,总是重新编译,怎么办?先确认编译真的走了 sccache(Cargo 查RUSTC_WRAPPER,CMake 查 launcher 参数)。然后检查路径、编译参数、工具链版本是否和上次一致,任何一项变了都会生成新缓存键。

Q2:CI 里缓存目录应该放哪?别放构建目录里,否则每次构建完就被清掉。放在 CI 提供的可持久化缓存路径,并用SCCACHE_DIR指过去,命中率立刻上来。

Q3:构建时提示连不上 sccache 服务器,直接失败了?sccache 默认在通信失败时让构建失败。想在断线时自动退回本地编译,设置SCCACHE_IGNORE_SERVER_IO_ERROR=1就行。

Q4:Windows 上 MSVC 调试符号缓存不了?把 CMake 的调试信息格式改成 Embedded(即/Z7)并启用 CMP0141 新策略,/Zi的分离 PDB 是无法缓存的。

Q5:想确认缓存到底有没有在工作?跑一次构建后执行sccache --show-stats,看 cache hits / misses 即可;想从零统计就先sccache --zero-stats

sccache 的使用就到这里:装好、接进构建系统、用--show-stats验证命中,三步闭环。更多细节按需查阅 docs/Local.md、docs/Configuration.md 和 docs/Rust.md。

【免费下载链接】sccacheSccache is a ccache-like tool. It is used as a compiler wrapper and avoids compilation when possible. Sccache has the capability to utilize caching in remote storage environments, including various cloud storage options, or alternatively, in local storage.项目地址: https://gitcode.com/GitHub_Trending/sc/sccache

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询