How to deal with multiple nested workspace roots?
如何使用Cargo拥有多个嵌套工作区?
我有以下项目结构:
1 2 3 4 5 6 7 8 | myworkspace ├── project_a │ └── Cargo.toml ├── project_b │ └── Cargo.toml │ └── project_b_dependency | └── Cargo.toml └── Cargo.toml |
其中
运行
1 2 3 4 | $ cargo build error: multiple workspace roots found in the same workspace: /myworkspace /myworkspace/project_b/project_b_dependency |
有没有简单的解决方法? 我想将
这不是"重构为工作空间结构"的重复,这导致外部包装箱导入无法工作,因为我想知道如何处理嵌套的工作空间。
工作空间不能嵌套; 如文档所述:
A crate may either specify package.workspace or specify
[workspace] .
That is, a crate cannot both be a root crate in a workspace (contain
[workspace] ) and also be a member crate of another workspace (contain
package.workspace ).
货运工作区RFC还指定了以下内容:
A workspace is valid if these two properties hold:
- A workspace has only one root crate (that with
[workspace] inCargo.toml ).- All workspace crates defined in
workspace.members point back to the workspace root withpackage.workspace .
嵌套工作空间似乎很难管理,因此
一种可能是更改项目的布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | . ├── 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 |
在
1 2 | [workspace] members= ["project_a","project_b"] |
在
1 2 | [dependencies] project_b_dependency = {path ="../../project_b_dependency"} |
我尝试在您的布局中使用
我找到一种方法来保留git子模块。