You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:40:24