资讯动态

sccache 实战:从安装到命中率 90% 的编译缓存与构建加速完整路径

发布时间:2026/9/20 1:49:12 来源:尧图企业网站定制
sccache 实战从安装到命中率 90% 的编译缓存与构建加速完整路径【免费下载链接】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 是一个 ccache 风格的编译器缓存工具以编译器包装器身份拦截编译命令命中时直接恢复缓存结果跳过真实编译。本文带它走完安装、按场景选配置、接入 Cargo/CMake/Makefile、以及命中率调优每步都是可执行命令。3 分钟快速上手先按下表定位你的环境执行对应一行命令环境推荐路径一行命令macOSHomebrew 预编译包brew install sccacheWindowsScoop 或 wingetscoop install sccache或winget install Mozilla.sccacheLinux通用release 页预编译 musl 静态二进制下载最新x86_64-unknown-linux-musl包解压放入/usr/local/binNix 系统nixpkgsnix-env -iA nixpkgs.sccache有 Rust 工具链cargo 拉预编译二进制cargo binstall sccache验证安装并显式启动后台服务器sccache 是客户端-服务器模型首次编译会自动拉起本地 server默认监听127.0.0.1:422610 分钟空闲自动退出sccache --version sccache --start-server预期输出版本号当前稳定版 0.18.0与服务器就绪信息。按场景选配置本地单人开发默认就是本地磁盘缓存上限 10GB多数情况不用动。要定制就两条变量export SCCACHE_DIR$HOME/.cache/sccache # 显式指定缓存目录 export SCCACHE_CACHE_SIZE20G # 可选默认 10GB随时查看命中情况sccache --show-stats团队共享缓存缓存放哪放全员可达的远端后端Redis 或 S3 兼容存储而不是各人本地盘。多大按构建量估中型仓库几个 GB 起步。谁来清理不用人管本地盘按SCCACHE_CACHE_SIZE超限 LRU 淘汰远端后端用 TTL 过期。建议一个 worker 负责写入其余只读避免并发写放大。以 Redis 为例详见 docs/Redis.mdexport SCCACHE_REDIS_ENDPOINTredis://cache.internal:6379 export SCCACHE_REDIS_KEY_PREFIXproj-name # 按项目隔离缓存键 export SCCACHE_REDIS_EXPIRATION604800 # TTL 秒数不设置则永不过期CI 容器环境容器每次重建本地盘缓存基本白存要么挂宿主机目录要么直接切远端后端。这里容易踩坑各 worker 的 checkout 路径不同会让绝对路径全部 miss用SCCACHE_BASEDIRS在哈希前剥掉前缀只支持绝对路径多个目录用:分隔export SCCACHE_BASEDIRS/builds export SCCACHE_IGNORE_SERVER_IO_ERROR1 # server 或后端故障时降级为直接编译不让构建失败让构建系统接上缓存一次编译请求在 sccache 里的走向接入 Cargocargo 调 rustc 走RUSTC_WRAPPERsccache 截住这次调用按参数 输入哈希因为 rustc 输出确定命中即可直接恢复。全局配置写一次# $HOME/.cargo/config.toml [build] rustc-wrapper sccache验证连跑两次cargo build第二次看sccache --show-stats的 compile_hits 应显著增长。接入 CMakeCMake 3.4 的 compiler launcher 就是为这类包装器准备的sccache 原样填进去不改任何编译参数。放在 CMakeLists.txt 里省得每次传参find_program(SCCACHE sccache REQUIRED) set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE}) set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE})MSVC 单独一个坑/Zi调试信息没法缓存。CMake 3.25 追加两行旧版本改为把各配置下/Zi替换为/Z7set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT $$CONFIG:Debug,RelWithDebInfo:Embedded) cmake_policy(SET CMP0141 NEW)验证cmake -B build cmake --build build后查 show-stats。接入原生 MakefileMakefile 只需把CC/CXX指到sccache 编译器。配合 make jobserver 时配方行要加前缀sccache 才能继承 make 的并发额度否则会自建一个按 CPU 核数的 jobserverCC sccache gcc CXX sccache g验证make -j后查 show-stats。调优与常见坑换 checkout 目录后全量 miss现象同一份代码换个目录或换台机器命中率归零。原因一句话绝对路径参与缓存键路径变了就是另一场编译。修复同 CI 节的export SCCACHE_BASEDIRS项目根目录多根目录用:分隔。Rust 构建零命中现象cargo build跑完 hits 始终是 0。原因调用系统链接器的bin/dylib/cdylib/proc-macrocrate 不可缓存debug profile 默认开启的增量编译也不可缓存细节见 docs/Rust.md。修复cargo build --release # release 无增量编译大bincrate 改成lib 薄bin包装命中率会明显上来。CI 里 server 掉线直接构建失败现象流水线偶发 failed to communicate with server 变红。原因默认策略是 server IO 出错即失败构建这是保护性设计但在 CI 太激进。修复同 CI 节的SCCACHE_IGNORE_SERVER_IO_ERROR1降级为直接编译。工具链升级后产物可疑现象缓存命中了但产物行为不对像拿到旧版本的东西。原因缓存条目与当前工具链状态不匹配。修复export SCCACHE_RECACHE1 # 强制覆盖写清掉可疑条目命中率自检两步对比法先清零计数器再连跑两次构建sccache --zero-stats cargo clean cargo build sccache --show-stats # 第一遍几乎全是 compile_miss sccache --zero-stats cargo clean cargo build sccache --show-stats # 第二遍compile_hit 应占绝对多数第二遍 hit 率远低于第一遍的 miss 数再回头对照上面四个坑排查。进阶分布式与生产化后端两选一Redis 低延迟、TTL 天然免清理S3 兼容对象存储容量大成本低。S3 最小配置详见 docs/S3.mdexport SCCACHE_S3_BUCKETteam-cc export SCCACHE_S3_REGIONus-east-1团队隔离靠 key 前缀Redis 用SCCACHE_REDIS_KEY_PREFIXS3 用 bucket 内前缀约定。server 生命周期用SCCACHE_IDLE_TIMEOUT控制长驻 CI 节点设0永不空闲退出。远端后端务必搭配前面提过的SCCACHE_IGNORE_SERVER_IO_ERROR1后端短暂不可用时构建照跑等下一轮再补写缓存。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价