1. 核心优化配置#
在项目根目录或全局路径 ~/.cargo/config.toml 中添加以下内容:
1
2
3
4
5
6
7
8
9
| [build]
# 1. 开启增量编译:复用中间产物,仅重编修改部分
incremental = true
# 2. 多线程并行编译:将 crate 拆分为 16 个单元并行处理
rustflags = ["-C", "codegen-units=16"]
# 3. 编译器缓存:使用 sccache 避免重复编译未变动的依赖
rustc-wrapper = "sccache"
|
2. 详细说明与权衡#
① 增量编译 (Incremental)#
- 作用:类似“只重烤焦的那层蛋糕”,不再从头开始。
- 适用场景:本地开发环境。
- 注意:在 CI 或生产环境发布构建时建议关闭(设置
CARGO_INCREMENTAL=0),以保证产物的确定性。
② 代码生成单元 (Codegen Units)#
- 作用:将顺序编译拆分为多线程并行。
- 效果:在 8 核及以上机器效果极其明显。
- 代价:由于跨单元优化减少,运行时性能可能微降 (1-2%)。建议:
- 开发环境:设置为
16。 - 发布版本:调低至
1 或 4 以保证极致性能。
③ sccache (Mozilla 缓存工具)#
- 作用:全局缓存编译产物,跨项目复用。
- 效果:只要依赖项未变,直接从缓存拉取,零等待。
3. 快速设置步骤#
第一步:安装 sccache#
第二步:配置环境变量 (可选)#
除了修改 config.toml,也可以直接在 Shell 配置文件中加入:
1
| export RUSTC_WRAPPER="sccache"
|
第三步:清理并验证#
1
| cargo clean && cargo build
|
4. 常见陷阱与建议#
| 环境/模式 | 建议配置 | 原因 |
|---|
| 本地开发 (Dev) | 开启增量、sccache、高 codegen-units | 追求即时反馈,维持开发心流 |
| CI 构建 | 关闭增量 (CARGO_INCREMENTAL=0) | 避免缓存污染,确保构建一致性 |
| 发布模式 (Release) | 调低 codegen-units (1-4) | 牺牲编译时间换取最终二进制运行速度 |
| 磁盘空间 | 定期执行 cargo clean | 缓存和中间产物会随时间占用大量空间 |
总结:通过 .cargo/config.toml 的三行核心代码,将编译器从“门卫”转变为“盟友”,让开发流程重新回到飞速迭代的状态。