如何在货物上安装多个嵌套工作空间?
我有以下项目结构:
myworkspace
├── project_a
│ └── Cargo.toml
├── project_b
│ └── Cargo.toml
│ └── project_b_dependency
| └── Cargo.toml
└── Cargo.toml
其中project_b_dependency
是一个大型库,它是一个git子模块,它本身就有一个工作区。
运行cargo build
时出错,因为工作区内有工作区。
$ cargo build
error: multiple workspace roots found in the same workspace:
/myworkspace
/myworkspace/project_b/project_b_dependency
有简单的解决方法吗?我希望将project_b_dependency
作为子模块保存在源代码管理中。
这不是Refactoring to workspace structure causes extern crate imports to not work的副本,因为我想知道如何处理嵌套工作区。
答案 0 :(得分:3)
工作区无法嵌套;作为the docs州:
crate可以指定package.workspace或指定
[workspace]
。 也就是说,一个箱子不能同时是工作空间中的根箱子(包含[workspace]
)并且还是另一个工作区的成员箱(包含package.workspace
)。
货物workspace RFC也指明了这一点:
如果这两个属性成立,则工作空间有效:
- 工作区只有一个根箱(
[workspace]
中Cargo.toml
)。workspace.members
中定义的所有工作区包都指向package.workspace
的工作区根目录。
答案 1 :(得分:2)
似乎嵌套工作空间很难管理,所以 一种可能性是改变你项目的布局:
.
├── myworkspace
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── project_a
│ │ ├── Cargo.toml
│ │ └── src
│ │ └── lib.rs
│ ├── project_b
│ │ ├── Cargo.toml
│ │ └── src
│ │ └── lib.rs
│ └── src
│ └── main.rs
└── project_b_dependency
├── Cargo.toml
└── src
└── lib.rs
myworkspace/Cargo.toml
中的:
[workspace]
members= ["project_a", "project_b"]
在myworkspace/project_b/Cargo.toml
[dependencies]
project_b_dependency = {path = "../../project_b_dependency"}
我尝试在您的布局中使用workspace.exclude
属性,但没有成功。
答案 2 :(得分:0)
我找到了一种保留git子模块的方法。