一、为什么要“搬家”

Rust 项目下的 target/ 目录常年 5–20 GB,里面是同依赖不同特征、增量缓存、调试符号等海量文件。
系统盘是宝贵的 SSD 空间,外挂机械盘或第二块 SSD 往往又大又便宜;
target 重定向到外挂盘,既能省空间,又能提速(编译写大文件时 SSD 更耐用)。


二、常见误区:写错键名导致“不生效”

很多教程随手给出:

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 GB 0 GB
外挂盘占用 0 GB 14 GB
清理命令 cargo clean 删系统盘 直接 rm -rf /data/ssd/cargo-target

八、总结

记住三句话:

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

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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐