rust··约 4 分钟读完
把 Rust 的 `target` 目录搬到外挂盘——正确姿势与避坑指南
摘要: Rust项目的target/目录占用大量SSD空间,可通过配置target-dir将其迁移到外挂盘。正确方法是在.cargo/config.toml中添加[build] target-dir = "绝对路径",并执行cargo clean验证。支持全局、工作区或单项目级配置,注意路径权限和绝对路径。临时可用环境变量CARGO_TARGET_DIR。迁移后系统盘空间释放,外挂盘承担存储,编译效率不变。关键点:字段名正确、路径绝对、权限可写。
rust开发语言后端
二、常见误区:写错键名导致“不生效”
很多教程随手给出:
target = "/data/ssd/cargo-target" # ❌ 错的
但 Cargo 根本不会解析这个字段!
正确关键字是 target-dir,且必须放在 [build] 表头下。
三、一步到位:配置方法
- 在项目根(或 workspace 根)新建/编辑
.cargo/config.toml:
[build]
target-dir = "/data/ssd/cargo-target" # ✅ 绝对路径
- 让目录生效:
# 1. 删掉旧 target,立竿见影看效果
cargo clean
# 2. 随便触发一次构建
cargo check
- 验证:
cargo metadata --format-version 1 | jq -r .target_directory
# 输出 → /data/ssd/cargo-target
此时 ls /data/ssd/cargo-target 会出现 debug/、release/ 等文件夹,
而项目目录下再也不会生成 target/。
四、三种“搬家”粒度,按需选择
| 粒度 | 配置位置 | 影响范围 | 备注 |
|---|---|---|---|
| 全局 | ~/.cargo/config.toml | 本机所有项目 | 适合个人开发机 |
| 工作区 | workspace/.cargo/config.toml | 整个 workspace | 推荐,CI/多人共享 |
| 单项目 | proj/.cargo/config.toml | 仅当前 crate | 临时或特殊需求 |
五、避坑 checklist
- 绝对路径:相对路径会相对于项目根解析,容易迷路。
- 权限 & 挂载:外挂盘要先
chmod 777 /data/ssd/cargo-target测试可写。 - 软链也能用,但别混用:
可行,但 Git 可能误跟踪,CI 容易踩坑;官方推荐ln -s /data/ssd/cargo-target targettarget-dir配置。 - Docker / CI:把外挂盘挂进容器同一路径,否则缓存失效。
- 共享缓存:多项目共用同一
target-dir能再省 30–50% 空间,但并发构建时需加锁(cargo build --frozen即可)。
六、临时一次性生效(无需改文件)
CARGO_TARGET_DIR=/data/ssd/cargo-target cargo build
适合脚本、CI 或想快速验证路径是否有效。
七、效果实测
以典型的 workspace(40 个 crate)为例:
| 默认 | 搬家后 | |
|---|---|---|
| 系统盘占用 | 14 GB | 0 GB |
| 外挂盘占用 | 0 GB | 14 GB |
| 清理命令 | cargo clean 删系统盘 | 直接 rm -rf /data/ssd/cargo-target |
八、总结
记住三句话:
- 字段名必须是
target-dir,放在[build]下; - 路径用绝对路径,权限要可写;
- 改完
cargo clean && cargo check立即见分晓。
把 target 搬到外挂盘,Rust 开发从此不再“吃”系统盘,SSD 寿命更长,编译依旧飞快。