如何在 Cargo 工作区的根目录中指定默认运行的板条箱"货物运行"?



现在我有一个有三个成员的货物工作区。

[workspace]
members = [
"foo",
"bar",
"baz",
]

如果我在根目录中运行cargo run,则会收到此错误:

错误:清单路径/home/lukas/dev/mahboi/Cargo.toml是虚拟清单,但此命令需要针对此工作区中的实际包运行

这是有道理的。我可以运行cargo run -p foo并且它可以工作。但问题是:foo是唯一可执行的 crate,我会经常执行它,所以如果我能运行cargo run并执行它就好了。

我尝试使用default-members键,但这没有帮助:

default-members = ["foo"]

有没有另一种方法可以告诉 Cargocargo run应该执行foocrate(相当于在foo/子目录中运行cargo run(?我也会接受使根箱非虚拟的答案(即添加一个[package]键(。

单个二进制

这从 Rust 1.30 开始可用。以下是我测试的完整文件集:

Cargo.toml

[workspace]
members = [
"foo",
"bar",
"baz",
]

foo/Cargo.toml

[package]
name = "foo"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]

foo/src/main.rs

fn main() {
println!("Hello, world!");
}

bar/Cargo.toml

[package]
name = "bar"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]

bar/src/lib.rs

#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}

baz/Cargo.toml

[package]
name = "baz"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
[dependencies]

baz/src/lib.rs

#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
$ 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
└── ...
$ 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!

多个二进制文件

从 Rust 1.37.0 开始,您可以使用 Cargo 的"默认运行"功能来指定使用哪一个。

foo/Cargo.toml

[package]
name = "foo"
version = "0.0.1"
authors = ["An Devloper <an.devloper@example.com>"]
default-run = "foo"

相关内容

  • 没有找到相关文章

最新更新