sccache 快速上手实战:3 分钟装好,把编译缓存接进你的构建系统

📅 发布时间:2026/9/20 3:58:45
sccache 快速上手实战:3 分钟装好,把编译缓存接进你的构建系统
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/sccachesccache 是一个类 ccache 的编译器包装与缓存工具。编译命令前面加上它相同的输入就会直接复用缓存里的结果跳过重复编译缓存可以放在本地磁盘也可以放在云存储。这篇文章带你完成安装、接入 Cargo / CMake / Makefile并在缓存不生效时快速排障。三分钟内装完并验证成功每个平台只给一种推荐方式一条命令的事。按你的平台选安装命令# macOSHomebrew 最省事 brew install sccache # WindowsScoop或 winget install Mozilla.sccache scoop install sccache # Linux到 releases 页面下载 x86-64 musl 预编译包解压后放进 /usr/local/bin sccache --version # 能打出版本号即可预编译二进制只有 x86-64。macOS 上 brew 会自动适配 Apple SiliconLinux 的 aarch64 没有预编译包走下一章的源码编译。一条命令验证安装成功编译同一个文件两次echo int main() { return 0; } t.c sccache gcc -o t.o -c t.c # 第一次缓存未命中真实编译 sccache gcc -o t.o -c t.c # 第二次缓存命中跳过编译 sccache --show-stats✅ 统计里出现Hits: 1就说明链路通了。首次调用会慢几秒因为 sccache 会按需拉起一个后台 server属于正常现象。什么时候需要换别的安装方式默认方式覆盖大多数场景。只有默认方式不适用时才需要看这张表换路线平台推荐方式取舍说明适用场景macOSbrew install sccache自动更新、零配置版本跟随 Homebrew 节奏日常开发Windowsscoop install sccache轻量、易卸载winget同样可用日常开发、CILinux x86-64releases 页 musl 二进制免依赖、免包管理器最省心服务器、容器、CI已装 Rust 的环境cargo binstall sccache直接拉预编译二进制很快本机已有 Rust 工具链任意平台cargo install sccache --locked⚠️ 从源码编译慢且耗资源需要按 feature 裁剪存储后端、或要最新提交怎么换成源码编译# 从源码编译慢、耗资源CI 里慎用 cargo install sccache --locked # 已有 Rust 工具链时优先用这个拿预编译二进制 cargo binstall sccacheNix 用户不需要看这里nixpkgs 里有现成的pkgs.sccache直接用即可。把 sccache 接进 Cargo、CMake、Makefile装好不等于生效下面按构建系统给最小可用配置。Cargo配置文件里一行搞定[build] rustc-wrapper sccache # 关闭增量编译debug 构建才能被缓存 [profile.dev] incremental false放到项目.cargo/config.toml需 Cargo 1.40或写进~/.cargo/config.toml全局生效。临时会话和 CI 里也可以用环境变量RUSTC_WRAPPERsccache代替配置文件。⚠️ 注意调用系统链接器的 cratebin、dylib、cdylib、proc-macro无法被缓存详见 Rust 缓存注意事项。CMakeconfigure 时传两个 launcher 参数CMake 3.4 原生支持 compiler launchercmake -DCMAKE_C_COMPILER_LAUNCHERsccache \ -DCMAKE_CXX_COMPILER_LAUNCHERsccache \ -B build进阶选项一写进 CMakeLists.txt 让团队共享。核心是find_program(SCCACHE sccache REQUIRED)然后对 C 和 CXX 分别set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE})。进阶选项二仅 Windows MSVC默认的/Zi调试信息会生成每个目标文件外部 PDB无法被缓存。CMake 3.25 请改成内嵌 PDBset(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT $$CONFIG:Debug,RelWithDebInfo:Embedded) cmake_policy(SET CMP0141 NEW)CMake 3.24 及更早版本则需要在 Debug 配置里把/Zi替换成/Z7。Makefile改 CC 和 CXX 两个变量CC sccache gcc CXX sccache g export CC CXXexport保证子 make 进程也带上。更复杂的构建脚本可以写个包装脚本放进 PATH里面检测到 sccache 就exec sccache $否则exec $原样透传保证没装 sccache 的机器也能构建。验证缓存真的在工作命中率上不去缓存就是白搭。这一章讲怎么读数、怎么查问题。统计里读出命中和未命中sccache --zero-stats # 先把统计清零 make clean make # 完整重跑一遍构建 sccache --show-stats # 看 Hits / Misses / use rate # 命中率低时开调试日志再跑一次 SCCACHE_ERROR_LOG/tmp/sccache.log SCCACHE_LOGdebug make一次调用的内部流程是这样的缓存未命中的常见原因绝对路径不一致缓存 key 默认包含完整路径换个 checkout 目录就全 miss。设SCCACHE_BASEDIRS/path/to/project在哈希前剥掉路径前缀不同目录、不同用户之间就能共享缓存。Rust 增量编译开着debug profile 默认对 workspace 成员开增量编译增量编译不参与缓存。按第 3 章关掉incremental。缓存条目损坏怀疑缓存里有坏产物时设SCCACHE_RECACHE强制重编译并覆盖旧条目。编译器特性不支持GCC 和 MSVC 的 C20 modules 暂不支持会直接绕过缓存详见 README 的已知限制。换工具链版本、改-D宏导致的 miss 是设计使然——它们本来就参与 key 计算不用修。日志与超时排查server 默认监听127.0.0.1:4226可用SCCACHE_SERVER_PORT改端口或SCCACHE_SERVER_UDS改用 Unix socket。默认连不上 server 就构建失败设SCCACHE_IGNORE_SERVER_IO_ERROR1可退化为直接调本地编译器。server 空闲 10 分钟后自动退出CI 常驻场景用SCCACHE_IDLE_TIMEOUT0保持不退出。启动等待默认 10 秒server_startup_timeout_ms慢机器可在配置文件中调大。本地缓存默认 10GBSCCACHE_CACHE_SIZE20G可调全部选项见配置参考。下一步跑完一遍完整构建后再看一次sccache --show-stats命中率稳定之后再考虑把缓存接到 S3、Redis 这类共享后端见 S3 文档让团队之间互相命中。【免费下载链接】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),仅供参考