如何修复Rust嵌套Cargo.toml项目的工作区错误?
Rust工作空间构建错误修复方案
我有一个Rust实验项目,包含三个Cargo.toml文件,目标是能从三个目录分别独立构建并运行指定二进制可执行文件。其中#1和#2运行正常,但在#3所在目录执行cargo build时出现以下错误:
C:\git\my_rust_workspace\my-numerical-package\my_bin>cargo build error: current package believes it's in a workspace when it's not: current: C:\git\my_rust_workspace\my-numerical-package\my_bin\Cargo.toml workspace: C:\git\my_rust_workspace\Cargo.toml this may be fixable by adding `my-numerical-package\my_bin` to the `workspace.members` array of the manifest located at: C:\git\my_rust_workspace\Cargo.toml Alternatively, to keep it out of the workspace, add the package to the `workspace.exclude` array, or add an empty `[workspace]` table to the package's manifest. C:\git\my_rust_workspace\my-numerical-package\my_bin>
三个Cargo.toml文件内容如下:
#1 根目录Cargo.toml
[workspace] members = [ "my-numerical-package", ] [package] name = "my_rust_workspace" version = "4.0.0-dev" edition = "2021" license = "Apache-2.0" keywords = ["my_rust_workspace"] [dependencies] my-numerical-package = { path = "my-numerical-package" } clap = { version = "3.1.18", features = ["derive"] } rand = { version = "0.8.5", features = [ "small_rng" ] } rand_distr="0.4.3" nalgebra = "0.31.1" # ---------- Logging log = "0.4.0" env_logger = "0.9.0" [[bin]] name = "main" path = "./main.rs" [package.metadata.docs.rs] # To build locally use # RUSTDOCFLAGS="--html-in-header katex-header.html" cargo doc --no-deps --document-private-items --open rustdoc-args = ["--html-in-header", "katex-header.html"]
#2 my-numerical-package/Cargo.toml
[package] name = "my-numerical-package" version = "0.1.0" edition = "2021" [lib] name = "my_lib" path = "./my_lib/lib.rs" [[bin]] # my_rust_workspace/main.rs name = "my_bin_1" path = "../main.rs" [[bin]]# my_rust_workspace/my-numerical-package/main.rs name = "my_bin_2" path = "./main.rs" [[bin]]# my_rust_workspace/my-numerical-package/my_bin/main.rs name = "my_bin_3" path = "./my_bin/main.rs" [dependencies] rand="0.3.14" rand_distr = "0.4"
#3 my-numerical-package/my_bin/Cargo.toml
[package] name = "my_bin_package" version = "0.1.0" edition = "2021" [lib] name = "my_lib" path = "../my_lib/lib.rs" [[bin]] # my_rust_workspace/main.rs name = "my_bin_1" path = "../../../main.rs" [[bin]]# my_rust_workspace/my-numerical-package/main.rs name = "my_bin_2" path = "../../main.rs" [[bin]]# my_rust_workspace/my-numerical-package/my_bin/main.rs name = "my_bin_3" path = "./main.rs" [dependencies] rand="0.3.14" rand_distr = "0.4"
修复方案
方案一:将my_bin加入根工作空间成员
修改根目录(#1)的Cargo.toml,在workspace.members数组中添加my-numerical-package/my_bin:
[workspace] members = [ "my-numerical-package", "my-numerical-package/my_bin", # 添加这一行 ]
这样my_bin会被纳入根工作空间管理,能正常参与构建。
方案二:将my_bin排除在根工作空间之外
如果希望my_bin保持独立,不加入根工作空间,修改根目录(#1)的Cargo.toml,添加workspace.exclude数组:
[workspace] members = [ "my-numerical-package", ] exclude = [ "my-numerical-package/my_bin", # 添加这一行 ]
Cargo会忽略这个目录,不会将其视为工作空间的一部分。
方案三:让my_bin成为独立工作空间
修改#3的Cargo.toml,添加一个空的[workspace]表:
[package] name = "my_bin_package" version = "0.1.0" edition = "2021" [workspace] # 添加这个空表 [lib] name = "my_lib" path = "../my_lib/lib.rs" # 其余内容保持不变
这样my_bin会被视为独立的工作空间,与根工作空间解除关联,可独立构建。
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

