如何处理多个嵌套的工作空间根?
How to deal with multiple nested workspace roots?
如何使用 Cargo 拥有多个嵌套工作区?
我有以下项目结构:
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
作为子模块保留在源代码管理中。
这不是 的副本,因为我想知道如何处理嵌套工作区。
嵌套的工作区似乎很难管理,所以
一种可能性是更改项目的布局:
.
├── 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
属性 用于您的布局,但没有成功。
工作区不能嵌套;作为 the docs 状态:
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
).
Cargo workspace RFC 还指定了这个:
A workspace is valid if these two properties hold:
- A workspace has only one root crate (that with
[workspace]
in Cargo.toml
).
- All workspace crates defined in
workspace.members
point back to the workspace root with package.workspace
.
我找到了保留 git 子模块的方法。
- 将子模块项目的工作区成员添加到父项目Cargo.toml
- 删除子模块项目的 Cargo.toml
- 使用submodule_name/crate路径定义依赖。
如何使用 Cargo 拥有多个嵌套工作区?
我有以下项目结构:
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
作为子模块保留在源代码管理中。
这不是
嵌套的工作区似乎很难管理,所以 一种可能性是更改项目的布局:
.
├── 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
属性 用于您的布局,但没有成功。
工作区不能嵌套;作为 the docs 状态:
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 (containpackage.workspace
).
Cargo 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
.
我找到了保留 git 子模块的方法。
- 将子模块项目的工作区成员添加到父项目Cargo.toml
- 删除子模块项目的 Cargo.toml
- 使用submodule_name/crate路径定义依赖。