Ubuntu Rust 编译速度慢怎么办
导读:Ubuntu 下 Rust 编译加速实用清单 一 高性价比优化 立竿见影 缓存命中优先:使用 sccache 做编译结果缓存,本地与 CI 都有效。安装后在 shell 或 CI 中设置环境变量:export RUSTC_WRAPPER=...
Ubuntu 下 Rust 编译加速实用清单
一 高性价比优化 立竿见影
- 缓存命中优先:使用 sccache 做编译结果缓存,本地与 CI 都有效。安装后在 shell 或 CI 中设置环境变量:
export RUSTC_WRAPPER=sccache,并在~/.cargo/config.toml写入[build] rustc-wrapper = "sccache"。社区实测重复构建普遍可下降约70%,CI 建议同时缓存$CARGO_HOME/registry与$CARGO_HOME/target。 - 更快的链接器:将链接器从 GNU ld 切换到 LLD 或 mold。Ubuntu 22.04+ 自带 lld,mold 需自行安装。示例配置:
链接阶段通常是瓶颈之一,更换后可显著缩短链接耗时。[target.x86_64-unknown-linux-gnu] linker = "clang" rustflags = ["-C", "link-arg=-fuse-ld=lld"] # 或 mold: "-C", "link-arg=-fuse-ld=mold" - 并行与增量:充分利用多核并开启增量。
[build] jobs = N(N 建议为 CPU 核数,开发时可保留 2 核给编辑器/终端:cargo build -j $(nproc --ignore=2)),incremental = true(稳定版已默认开启,显式声明更稳妥)。 - 开发配置别“过重”:调试构建请保持
opt-level = 0、debug = 1(仅行表,通常比 full 快约30%)、lto = false、codegen-units = 16;把重量优化留给--release。 - 依赖“减肥”:移除未使用依赖,减少类型集合与单态化成本。工具:
cargo install cargo-machete & & cargo machete。 - 快速校验替代全量构建:日常开发优先用
cargo check,或用cargo watch -c在文件变动时自动 check,获得秒级反馈。
二 进阶手段 进一步压榨性能
- 并行前端(Nightly):启用并行编译器前端可进一步缩短全量构建时间(代价是更高的内存占用)。示例:
RUSTFLAGS="-Z threads=8" cargo +nightly build,或在~/.cargo/config.toml中设置[build] rustflags = ["-Z", "threads=8"]。 - 更快的后端(Nightly,仅 Debug):开发期可用 Cranelift 作为后端,牺牲少量运行时性能换取更快的迭代速度:
rustup toolchain install nightly & & rustup component add rustc-codegen-cranelift --toolchain nightly,随后cargo +nightly build。 - 测试更快:使用 cargo-nextest 替代
cargo test,并行模型更高效,实测可快至60%。 - 构建过程剖析:
- 用
cargo build --timings查看各 crate 编译耗时,定位“拖后腿”的依赖。 - 用
cargo rustc -- -Zself-profile生成火焰图/Chrome trace,深入分析前端/后端瓶颈。
- 用
三 项目与工程化改造 长期收益
- 拆分巨型 Crate:当单 crate 规模过大(如超过2×10⁴行)时,按功能拆分为 workspace 能显著缩短增量重建时间。
- 精细化依赖与特性:对外依赖尽量
default-features = false,只启用需要的功能,减少编译与链接产物。 - 减少重型
build.rs:将 C/C++ 依赖改为预编译静态库或系统库,避免在每次构建中重复执行重量级构建脚本。
四 CI 一键复制配置
- GitHub Actions 示例(稳定版工具链 + sccache + rust-cache,含常用环境变量):
团队/大规模 CI 可进一步考虑自建 sccache 分布式缓存 或远程后端,提高跨机复用率。name: Fast Rust CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable - name: Cache cargo + sccache uses: mozilla-actions/sccache-action@v0.0.6 with: version: "v0.8.2" - name: Rust cache uses: Swatinem/rust-cache@v2 - name: Build run: cargo build --all-features env: RUSTC_WRAPPER: sccache CARGO_INCREMENTAL: 1 SCCACHE_GHA_ENABLED: true - name: Test run: cargo nextest run --all-features
五 常见避坑与快速排查
- 不要把
opt-level=3或lto=true放到开发配置;这会显著放大编译与链接时间。 - 避免滥用
build.rs执行重型 C/C++ 构建;优先预编译为静态库。 - 保持
Cargo.lock提交到版本库,避免 CI 重复解析依赖与下载。 - 若 IDE 与 Cargo 互相阻塞或注解延迟高,可让 Rust Analyzer 与 Cargo 使用不同
target目录(会增加磁盘占用),并确保使用最新稳定版工具链与组件。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Rust 编译速度慢怎么办
本文地址: https://pptw.com/jishu/782152.html
