如何告诉Cargo构建除main.rs之外的文件?

42

这是我的目录结构:

lowks@lowkster ~/src/rustlang/gettingrusty $ tree .
.
├── Cargo.lock
├── Cargo.toml
├── foo.txt
├── src
│   ├── boolean_example.rs
│   ├── function_goodbye_world.rs
│   ├── listdir.rs
│   ├── looping.rs
│   ├── main.rs
│   ├── pattern_match.rs
│   └── write_to_file.rs
└── target
    ├── build
    ├── deps
    ├── examples
    ├── gettingrusty
    └── native

6 directories, 11 files

当我运行'cargo build'命令时,似乎只构建了main.rs文件。我应该如何更改Cargo.toml以构建其余的文件?

4个回答

42
other.rs 文件放入 src 文件夹下的 bin 子文件夹中 (./src/bin/other.rs)。然后运行 cargo build --bin othercargo run --bin other

1
这也可以通过运行 cargo build 来实现,无需附加文件名。 - Jerry Ajay

20

Rust编译器同时编译所有文件以构建crate,这可以是可执行文件或库。要将文件添加到crate中,在crate根目录(例如main.rs)或其他模块中添加mod项:

mod boolean_example;
mod function_goodbye_world;
mod listdir;
mod looping;
mod pattern_match;
mod write_to_file;

如果您想从您的箱根访问在其他模块中定义的项,则必须使用模块名称来限定该项。例如,如果您在模块looping 中有一个名为foo的函数,则必须引用它作为looping::foo

您也可以添加use语句来导入模块范围内的名称。例如,如果您添加use looping::foo;,那么您只需使用foo来引用looping::foo

有关更多信息,请参见The Rust Programming Language中的将模块分离到不同文件中章节。


19

有几种不同的二进制或目标文件类型,cargo 可以识别:

例如,如果文件boolean_example.rs是一个独立的示例,您想要运行它,可以将其放在examples目录中,并像这样告诉 cargo:

[[example]]
name = "boolean" # examples/boolean.rs

这使得你可以使用cargo run --example boolean来调用你的示例。

同时阅读cargo书中包布局的页面,了解这些目标目录如何构建。


你要把这个描述放在哪个文件里? - bokan
1
@bokan 你需要将它放在 Cargo.toml 文件中。 - MEMark

-3

您可以将测试包含在main.rs文件中,如下所示 >>

文件名:src/main.rs

#[cfg(test)]
mod tests {
    use super::*;
  #[test]
 fn this_test_will_pass() {
    let value = 4;
    assert_eq!(4, value);
  }

  #[test]
  fn this_test_will_fail() {
    let value = 8;
    assert_eq!(5, value);
  }
}

或者从你的测试文件中调用它们。 然后使用测试命令运行它们:cargo test

来自文件名:lib/tests.rs

mod tests;

tests::run();
在这种情况下,main.rs将被构建,但只有tests.rs文件将被执行。

更多证明:

exmaple


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接