我如何告诉 Cargo 构建 main.rs 以外的文件?

问题描述 投票:0回答:4

这是我的目录结构:

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 来构建其余文件?

rust rust-cargo
4个回答
45
投票

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


21
投票

Rust 编译器同时编译所有文件以构建一个 crate,它可以是可执行文件,也可以是库。要将文件添加到您的 crate,请将

mod
项目添加到您的 crate 根(此处为 main.rs)或其他模块:

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

要从 crate 根访问另一个模块中定义的项目,您必须使用模块名称限定该项目。例如,如果模块

foo
中有一个名为
looping
的函数,则必须将其称为
looping::foo

您还可以添加

use
语句以在模块范围内导入名称。例如,如果添加
use looping::foo;
,则可以直接使用
foo
来引用
looping::foo

有关更多信息,请参阅 Rust 编程语言中的将模块分离到不同的文件中


21
投票

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

例如,如果文件

boolean_example.rs
是一个您想要运行的独立示例,您可以将其放入
examples
目录中,并像这样告诉 Cargo:

# Cargo.toml file at project root

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

这可以让您使用

cargo run --example boolean

调用示例

请阅读货物手册的包装布局页面,了解如何构建这些目标目录。


-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

© www.soinside.com 2019 - 2024. All rights reserved.