我如何指定默认在Cargo工作区根中运行的crate`cargo run`?

时间:2018-08-10 11:24:00

标签: rust rust-cargo

现在我有一个包含三个成员的货运工作区。

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

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

  

错误:清单路径/home/lukas/dev/mahboi/Cargo.toml是一个虚拟清单,但是此命令要求在此工作空间中的实际包上运行

这很有道理。我可以运行cargo run -p foo,它可以工作。但问题是:foo是唯一可执行的板条箱,我会经常执行它,所以如果我只运行cargo run并执行它,那就太好了。

我尝试使用default-members键,但这无济于事:

default-members = ["foo"]

是否还有另一种方式告诉货运cargo run应该执行foo条板箱(相当于在cargo run子目录中运行foo/)?我还将接受使根板条箱变为非虚拟的答案(即添加一个[package]键)。

1 个答案:

答案 0 :(得分:9)

单二进制

is available as of 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!

多个二进制文件

您将需要使用Cargo不稳定的(从Rust 1.31版本开始)的“默认运行”功能来指定要使用的功能。

foo / Cargo.toml

cargo-features = ["default-run"]

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