现在我有一个有三个成员的Cargo工作区.
[workspace]
members = [
"foo",
"bar",
"baz",
]
Run Code Online (Sandbox Code Playgroud)
如果我cargo run在根目录中运行,我收到此错误:
错误:清单路径
/home/lukas/dev/mahboi/Cargo.toml是虚拟清单,但此命令需要针对此工作空间中的实际包运行
那讲得通.我可以跑cargo run -p foo,它的工作原理.但问题是:foo是唯一可执行的包,我会经常执行它,所以如果我可以运行cargo run并执行它会很好.
我试图使用default-members密钥,但这没有帮助:
default-members = ["foo"]
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法告诉Cargo cargo run应该执行foocrate(相当于cargo run在foo/子目录中运行)?我也会接受使根箱不是虚拟的答案(即添加[package]密钥).
She*_*ter 10
这可以从Rust 1.30开始提供.这是我测试过的完整文件集:
Cargo.toml
[workspace]
members = [
"foo",
"bar",
"baz",
]
Run Code Online (Sandbox Code Playgroud)
富/ Cargo.toml
[package]
name = "foo"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
富/ SRC/main.rs
fn main() {
println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)
酒吧/ Cargo.toml
[package]
name = "bar"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
酒吧/ SRC/lib.rs
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
Run Code Online (Sandbox Code Playgroud)
巴兹/ Cargo.toml
[package]
name = "baz"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
巴兹/ SRC/lib.rs
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
Run Code Online (Sandbox Code Playgroud)
$ tree .
.
??? Cargo.lock
??? Cargo.toml
??? bar
? ??? Cargo.toml
? ??? src
? ??? lib.rs
??? baz
? ??? Cargo.toml
? ??? src
? ??? lib.rs
??? foo
? ??? Cargo.toml
? ??? src
? ??? main.rs
??? src
? ??? lib.rs
??? target
??? ...
Run Code Online (Sandbox Code Playgroud)
$ cargo run
Compiling baz v0.1.0 (file:///private/tmp/example/baz)
Compiling bar v0.1.0 (file:///private/tmp/example/bar)
Compiling foo v0.1.0 (file:///private/tmp/example/foo)
Finished dev [unoptimized + debuginfo] target(s) in 0.39s
Running `target/debug/foo`
Hello, world!
Run Code Online (Sandbox Code Playgroud)
您将需要使用Cargo的不稳定(从Rust 1.31开始)"默认运行"功能来指定使用哪一个.
富/ Cargo.toml
[package]
name = "foo"
version = "0.0.1"
authors = ["An Devloper <an.devloper@example.com>"]
default-run = "foo"
Run Code Online (Sandbox Code Playgroud)