Cargo 工作空间(workspaces)用来管理多个相互关联且需要协同开发的 crate,组织大的工程。
介绍
实现方式:通过共享一个 Cargo.lock
和输出文件夹的包
创建工作空间
$ mkdir tmp & cd tmp
$ touch Cargo.toml
$ cat Cargo.toml
[workspace]
members = [
"my_binary_crate1",
"my_lib_create1"
]
cargo new my_binary_crate1
cargo new my_lib_create1 --lib
cargo build
会生成 target
、Cargo.lock
文件
- 为 my_binary_crate1 添加 my_lib_create1 依赖:
$ cd my_binary_crate1
$ cat Cargo.toml
...
[dependencies]
my_lib_create1 = { path = "../my_lib_create1"}
cd tmp
cargo run -p my_binary_crate1
说明:
- 工作空间只有一个
Cargo.lock
文件,在工作空间根目录
- 保证工作空间所有 crate 使用的依赖的版本相同
- 工作空间所有 crate 相同兼容
- 子项目引用包需要在自己的
Cargo.toml
中引入
- 在工作空间执行
cargo test
会依次执行每一个子项目的测试
- 指定子项目测试:
cargo test -p my_binary_crate1
- 发布时需要在具体的子目录手动执行
cargo publish