ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

sccache 安装与配置完全指南:从开发机一行命令到团队级编译缓存

sccache 安装与配置完全指南:从开发机一行命令到团队级编译缓存 sccache 安装与配置完全指南从开发机一行命令到团队级编译缓存【免费下载链接】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 风格的编译器包装器它横在构建系统与编译器之间把可复用的编译结果存进缓存命中时直接跳过真实编译。与 ccache 相比它的编译缓存既可以放本地磁盘也能挂到 Redis、S3 等远端存储上共享。本文覆盖三大平台的 sccache 安装、Cargo 与 CMake/Makefile 的接入配置、团队共享缓存与 CI 流水线的用法以及一套完整的验证与调优流程。一条命令装好 sccache三大平台通用 结论先行macOS 用户brew install sccache即可其余平台按下面的选择表任选其一。各平台怎么选适用场景安装命令是否自动更新维护成本macOS 开发机brew install sccache跟随brew upgrade低Windows 团队scoop install sccachescoop update按需低Linux 构建服务器官方预编译二进制 systemd手动升级中CI 镜像固化cargo install sccache --locked锁定版本无意外更新低除上表两种主推方式外也支持choco install sccache、sudo snap install sccache --classic以及源码编译安装按团队习惯二选一即可。二进制包直接放到项目官方发布页选择与平台、架构匹配的压缩包解包后把可执行文件放进 PATH 即可。Linux 上推荐带 musl 标签的静态链接版本——不依赖目标机上的 glibc 版本往 CI 镜像里塞最省心。源码编译适合要定制后端特性的人需要 Redis、S3 这类远端缓存后端、或想精确锁定版本时从源码装# 安装 Rust 工具链后执行 cargo install sccache --locked # 只启用需要的后端减小体积 cargo install sccache --locked --no-default-features --featuress3,redis静态链接的两个小提示Linux 上可给~/.cargo/config.toml加[target.x86_64-unknown-linux-musl] linker musl-gcc后用cargo build --release --target x86_64-unknown-linux-musl产出单文件二进制Windows MSVC 下加rustflags [-Ctarget-featurecrt-static]可去掉对 CRT 运行库的依赖。装完只验证一次sccache --version # 确认二进制可执行 sccache --show-stats # 首次应为全 0说明统计通道正常个人开发机让 cargo 与 CMake 立刻吃到缓存红利用 RUSTC_WRAPPER 两行接入 Rust 构建对 Rust 项目来说sccache 加速构建的关键就是让 Cargo 的每次 rustc 调用先过缓存export RUSTC_WRAPPER/usr/local/bin/sccache cargo build --release临时会话用环境变量足够长期项目建议写进 Cargo 配置全局~/.cargo/config.toml或项目内.cargo/config.toml终端换了也不受影响[build] rustc-wrapper sccache # sccache 在 PATH 中时直接写名字让 CMake 自动走 sccacheCMake 3.4 的编译器启动器compiler launcher构建时插在编译器前面的钩子机制就是为这类包装器设计的命令行传参最快cmake -DCMAKE_C_COMPILER_LAUNCHERsccache \ -DCMAKE_CXX_COMPILER_LAUNCHERsccache \ -B build如果想写进 CMakeLists.txt 且对无 sccache 的环境自动降级用条件分支包住option(USE_SCCACHE Enable compilation caching ON) if(USE_SCCACHE) find_program(SCCACHE sccache) if(SCCACHE) set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE}) set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE}) else() message(WARNING sccache not found, caching disabled) endif() endif()⚠️ Windows MSVC 有个坑默认/Zi生成的外部调试信息 sccache 无法安全复用要么把 Debug 配置的/Zi替换为/Z7要么在 CMake 3.25 上启用新策略if(MSVC) cmake_policy(SET CMP0141 NEW) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded) endif()Makefile 里塞两个变量就够了CC sccache gcc CXX sccache g %.o: %.c $(CC) -c $ -o $如果构建系统不允许改 Makefile就放一个透传脚本兜底脚本内command -v sccache成功则exec sccache $否则直接exec $再把脚本名填给 CC/CXX。团队共享把编译缓存搬到远端存储本地磁盘缓存有两个硬约束只能单机访问且同一时刻只能有一个 sccache 服务进程写它。团队场景下更合理的做法是把缓存放到远端让所有开发机互相受益。sccache 支持的后端包括 Redis、Memcached、S3 兼容对象存储、Azure、GCS 等全部通过环境变量开启例如 Redisexport SCCACHE_REDIS_ENDPOINTredis://cache-server:6379 export SCCACHE_REDIS_KEY_PREFIXteam-projectS3 兼容存储则是配置桶名与 endpointexport SCCACHE_BUCKETmy-compilation-cache export SCCACHE_ENDPOINTs3.us-east-1.amazonaws.com远端和本地磁盘可以同时启用本地做一级热缓存远端兜底分层缓存的配置细节可参考仓库内的 docs/MultiLevel.md。长期开机的构建服务器上还可以把 sccache 注册为 systemd 服务用SCCACHE_IDLE_TIMEOUT0让它常驻而不随最后一次构建退出。CI 流水线只读缓存让构建又快又稳CI 里最常见的姿势是消费共享缓存、不回写避免污染团队数据也省去网络写入开销# 本地磁盘缓存设为只读 export SCCACHE_LOCAL_RW_MODEREAD_ONLY # 远端后端对应使用各自的 RW_MODE 变量写法一致配合最小环境变量清单export SCCACHE_DIR/home/ci/.cache/sccache # 固定位置配合层缓存复用 export SCCACHE_CACHE_SIZE20G export RUSTC_WRAPPER/usr/local/bin/sccache export SCCACHE_LOGinfo # 排查时用 debug export SCCACHE_ERROR_LOG/tmp/sccache.log # 错误单独落盘注意只读模式要求缓存里已有数据对空缓存开启它只会白白增加开销。验证与调优确认缓存真的在加速构建两次构建对比是最直接的验证方法# 第一轮全未命中 cargo clean cargo build --release sccache --show-stats # 第二轮应当大面积命中 cargo clean cargo build --release sccache --show-statsC/C 侧同理make clean make sccache --show-stats第二轮的cache_hits应明显上升。整个链路可以画成下面这张图命中率低时优先排查三件事编译使用的绝对路径是否漂移路径进缓存键、环境变量与工具链版本是否一致、MSVC 是否仍在使用/Zi。仍不放心就把SCCACHE_LOG调到debug观察每次调用的决策过程超时、服务端等运行时参数统一收录在 docs/Configuration.md。调优上记住两条SCCACHE_CACHE_SIZE默认 10GCI 大仓建议直接提到 20–30G网络后端开启压缩传输可显著减少带宽占用。延伸阅读环境变量总表与配置写法docs/Configuration.md本地缓存、预处理器缓存与只读模式docs/Local.mdRedis 后端细节docs/Redis.md客户端/服务端架构与客户端编译模式docs/Architecture.md环境变量解析实现src/config.rs【免费下载链接】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),仅供参考
返回列表