sccache 安装与编译缓存实战指南一条命令起步5 分钟验证缓存命中【免费下载链接】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/sccachesccache 是一款编译缓存工具以编译器包装器身份拦截 gcc、clang、MSVC、rustc 的编译请求重复编译直接取缓存结果。本文按你的场景给出安装选型并覆盖 CMake、Makefile、Cargo 的接入与 CI 共享缓存。 选型sccache 安装方式按场景挑先定场景再抄命令。下表的推荐均以仓库文档为准一行命令即可起步。平台 / 典型场景推荐方式一条命令理由Linux发行版杂、环境多cargo 源码安装cargo install sccache --locked仓库给出的通用路径不挑发行版macOS日常开发机Homebrewbrew install sccache仓库文档列首位升级省心WindowsWin10/11wingetwinget install Mozilla.sccache系统自带无需额外包管理器CI / 批量构建机预编译二进制cargo binstall sccache仓库明确建议 CI 别从源码编译直接拉预编译包Nix 环境nixpkgsbuildInputs [ pkgs.sccache ];声明式版本锁死三平台安装一条命令起步每个平台只保留一种详写方式其余一句话带过。Linuxcargo install sccache --locked sccache --version执行后你会看到sccache 0.18.0这样的版本输出。前提是机器上有 Rust 工具链。发布页另有 musl 静态链接的预编译二进制解压即用Nix 用户可直接用 nixpkgs 包不想编译源码的用cargo binstall sccache拉预编译版本。macOSbrew install sccache sccache --version执行后同样看到版本号。没有 Homebrew 的机器可以走 MacPorts 路线。Windowswinget install Mozilla.sccache sccache --version执行后打开新的 PowerShell 窗口版本号即出现winget 装完要重开终端才进 PATH。偏好 Scoop 的机器用 scoop 等价安装即可。兜底源码编译上面都没覆盖你的平台或者你要裁剪存储后端就从源码树构建cargo build --release执行后在target/release/下得到可运行的二进制。仓库要求 Rust 1.91.0默认带全部云后端只要 S3 和 Redis 就加--no-default-features --featuress3,redis体积更小。✅ 装完先验证5 分钟确认缓存真的在工作装完不等于生效用两次编译确认编译缓存链路是通的。sccache --start-server echo int main(void){return 0;} /tmp/probe.c sccache gcc -o /tmp/probe.o -c /tmp/probe.c sccache gcc -o /tmp/probe.o -c /tmp/probe.c sccache --show-stats执行后你会看到第二次编译日志出现Cache hit--show-stats里Cache hits计数为 1。验收标准二次构建出现 cache hit 才算配好。统计里 hits 一直是 0说明每次都在真编译配置没接上。测完可跑sccache --zero-stats清零开始干净计时。两个基础环境变量详见 本地缓存文档SCCACHE_DIR缓存目录。默认 Linux 是~/.cache/sccachemacOS 是~/Library/Caches/Mozilla.sccacheWindows 是%LOCALAPPDATA%\Mozilla\sccacheSCCACHE_CACHE_SIZE缓存大小上限默认10G磁盘紧张就调小如2G接入你的构建系统CMake、Makefile、Cargo三种主流构建工具各一处配置改完构建命令本身不用动。CMake含 MSVC 调试信息注意点CMake 3.4 原生支持编译器启动器配置时加上两个参数即可cmake -DCMAKE_C_COMPILER_LAUNCHERsccache -DCMAKE_CXX_COMPILER_LAUNCHERsccache -B build执行后build/里每个编译单元都会经过 sccache。MSVC 注意CMake 3.25 请把CMAKE_MSVC_DEBUG_INFORMATION_FORMAT设为Embedded并将策略CMP0141设为NEW让调试信息内嵌到目标文件而不是单独 PDB3.24 及以下则把 Debug 配置里的/Zi换成/Z7。MakefileCC、CXX前面加上 sccache 就行这正是仓库 Usage 一节推荐的包装方式CC sccache gcc CXX sccache g执行make后所有.c/.cpp都走编译缓存并行 make 时 sccache 会接入 GNU make 的 jobserver不用额外处理。Cargo写进$HOME/.cargo/config.toml全局生效需要 cargo 1.40[build] rustc-wrapper sccache执行cargo build后跑sccache --show-stats应能看到命中增长。临时环境用export RUSTC_WRAPPERsccache替代也可。团队与 CIsccache 缓存跨机器共享单机的编译缓存只服务一台机器把后端指向同一个远程存储团队和 CI 就共享同一份缓存。以 Redis 为例配置文档export SCCACHE_REDIS_ENDPOINTredis://10.0.0.5:6379 export SCCACHE_REDIS_KEY_PREFIXteam-a export SCCACHE_REDIS_EXPIRATION604800执行后各机器指向同一 Redis 即开始共享集群部署改用SCCACHE_REDIS_CLUSTER_ENDPOINTS有密码再加SCCACHE_REDIS_USERNAME/SCCACHE_REDIS_PASSWORD。CI 用只读模式构建节点设SCCACHE_REDIS_RW_MODEREAD_ONLY本地后端对应SCCACHE_LOCAL_RW_MODEREAD_ONLY只消费缓存不写回避免流水线互相污染。注意本地只读模式对空缓存没有意义别在空盘上开。服务化部署点到为止构建机上跑sccache --start-server拉起常驻服务设SCCACHE_IDLE_TIMEOUT0可防止 10 分钟空闲退出客户端默认连本机127.0.0.1:4226构建命令零改动。 命中率上不去sccache 缓存排障清单按现象对号入座每条都给定位命令换目录/换机器构建就不命中默认要求绝对路径一致才命中。先sccache --show-stats确认是 miss再export SCCACHE_BASEDIRS/path/to/project把路径前缀归一化后重试编译结果可疑怀疑缓存项坏了用SCCACHE_RECACHE1 sccache gcc ...强制重编并覆盖缓存项报服务通信错误、构建直接失败SCCACHE_ERROR_LOG/tmp/sccache.log SCCACHE_LOGdebug sccache gcc ...看日志定位确认要降级时用SCCACHE_IGNORE_SERVER_IO_ERROR1让它静默回落到本地编译器Rust 项目命中率低debug 构建默认增量编译、bin/dylib/cdylib/proc-macrocrate 都不参与缓存见 Rust 缓存注意事项关闭 incremental 后重测改了环境变量没反应部分变量需要重启服务才生效sccache --stop-server后再sccache --start-server重复编译的时间到这里就从你的构建里拿走了本地改一行代码重编从半分钟回到秒级CI 节点直接从共享缓存取结果冷启动构建也不再从零开始。下次构建前跑一次sccache --show-stats命中数涨多少就是省了多少。【免费下载链接】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),仅供参考