使用 sccahe 缓存编译数据,以提高 Rust 项目编译速度
- Rust 编译慢是真的无语,尤其是大型一点的项目执行下
cargo build --release
后我都可以先去吃个饭了。。。 - Rust 编译慢的原因可以看下 Rust 编译模型之殇
- 如果只是单个 workspace 的话,其实是没必要去设置 Sccahe, 除非有多个项目都依赖了相同版本的组件。
- Rust 本身就支持单个 workspace 编译缓存的,但多个 workspace 如果引用了部分相同版本的组件,每个workspace或独立项目都要编译这些相同版本的组件,这样是没必要的,因此 mozilla 搞了个跨 workspace 缓存工具 Sccahe
Sccahe
- 详细配置请查看官方仓库 mozilla/sccache
- 使用 sccache 编译时会启动一个后台服务,因为这玩意是 CS 架构,不止支持本地缓存,还支持各种云,默认10分钟无数据交互就会自动关闭服务
- 注意一点,如果当前状态(
sccache --show-stats
)与你自定义的配置不符,请停止服务(sccache --stop-server
),刷新shell环境(source ~/.zshrc
)
Config
brew install sccache # 直接取得二进制文件,而不是使用cargo重新编译
# 在 .zshrc 或其他shell的配置文件中添加下面几个环境变量:
# 设置最大缓存为 5G 默认为 10G
export SCCACHE_CACHE_SIZE="5G"
# 设置缓存保存路径,默认 MacOS 为 `~/Library/Caches/Mozilla.sccache`
export SCCACHE_DIR="$HOME/.cargo/sccache"
# sccache 程序路径
export RUSTC_WRAPPER="sccache"
# 查看缓存服务状态
sccache --show-stats
# 停止与启动
sccache --stop-server
sccache --start-server
Test
配置好后直接正常使用 cargo build
即可,这里编译下 RustScan 做测试
初次编译花了1m 8s
,注意这个速度是提前下好依赖了(即不包括下载时间)
然后使用 cargo clean
清理编译数据,再次编译时 sccache 就开始发挥效果了,直接缩短为22.79s