一个仓库里有多个 crate,怎么管理依赖版本?哪些东西是共享的?继承是自动的吗?这篇搭一个三成员的工作区,逐项验证锁文件、target、继承机制、统一修改与编译次数。
cargo build --workspace 编译的 crate(按顺序):
Compiling itoa v1.0.18
Compiling u154_core v0.5.0 (<实验目录>/proj/u154/crates/core)
Compiling u154_util v0.5.0 (<实验目录>/proj/u154/crates/util)
Compiling u154_cli v0.5.0 (<实验目录>/proj/u154/crates/cli)
工作区里的 Cargo.lock 个数:1;成员目录里是否有自己的 target / Cargo.lock:False
itoa 在 Cargo.lock 里出现 1 次(三个成员共用同一份)Cargo.lock 的细节见Cargo.lock 的作用;依赖解析规则见Cargo.toml 依赖解析。
u154_core version 0.5.0 edition 2024 license MIT 依赖 ['itoa^1'] u154_util version 0.5.0 edition 2024 license None 依赖 ['u154_core* (path)', 'itoa^1'] u154_cli version 0.5.0 edition 2024 license None 依赖 ['u154_util* (path)']
版本: {'u154_cli': '0.6.0', 'u154_core': '0.6.0', 'u154_util': '0.6.0'}
itoa 解析为: ['1.0.9']cargo build -p u154_core 编译了 ['itoa', 'u154_core'] cargo build -p u154_util 编译了 ['u154_util'] 在 crates/util 目录里 cargo build 编译了 [] 在 crates/util 目录运行 cargo 时用的是哪个 target / lock: target 在工作区根 | 成员目录下 Cargo.lock: False
Crate、Package 与 Workspace 的概念见Crate、Package 与 Workspace。
3 个独立项目(各用各的 target 目录)合计 Compiling itoa 出现 3 次 工作区(三个成员都依赖 itoa)Compiling itoa 出现 1 次