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] 表头下。


三、一步到位:配置方法

  1. 在项目根(或 workspace 根)新建/编辑 .cargo/config.toml
[build] target-dir = "/data/ssd/cargo-target" # ✅ 绝对路径
  1. 让目录生效:
# 1. 删掉旧 target,立竿见影看效果 cargo clean # 2. 随便触发一次构建 cargo check
  1. 验证:
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

  1. 绝对路径:相对路径会相对于项目根解析,容易迷路。
  2. 权限 & 挂载:外挂盘要先 chmod 777 /data/ssd/cargo-target 测试可写。
  3. 软链也能用,但别混用ln -s /data/ssd/cargo-target target 可行,但 Git 可能误跟踪,CI 容易踩坑;官方推荐 target-dir 配置。
  4. Docker / CI:把外挂盘挂进容器同一路径,否则缓存失效。
  5. 共享缓存:多项目共用同一 target-dir 能再省 30–50% 空间,但并发构建时需加锁(cargo build --frozen 即可)。

六、临时一次性生效(无需改文件)

CARGO_TARGET_DIR=/data/ssd/cargo-target cargo build

适合脚本、CI 或想快速验证路径是否有效。


七、效果实测

以典型的 workspace(40 个 crate)为例:

默认搬家后
系统盘占用14 GB0 GB
外挂盘占用0 GB14 GB
清理命令cargo clean 删系统盘直接 rm -rf /data/ssd/cargo-target

八、总结

记住三句话:

  1. 字段名必须是 target-dir,放在 [build] 下;
  2. 路径用绝对路径,权限要可写;
  3. 改完 cargo clean && cargo check 立即见分晓。

target 搬到外挂盘,Rust 开发从此不再“吃”系统盘,SSD 寿命更长,编译依旧飞快。