这是我的目录结构:
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 来构建其余文件?
将
other.rs
文件放入 bin
文件夹 (src
) 的 ./src/bin/other.rs
子文件夹中。然后运行 cargo build --bin other
或 cargo run --bin other
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 编程语言中的将模块分离到不同的文件中。
您可以将测试包含在 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 文件 被处决。