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

Low*_*ong 10 rust rust-cargo

这是我的目录结构:

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
Run Code Online (Sandbox Code Playgroud)

当我运行'货物构建'时,它似乎只是构建main.rs.我该如何更改Cargo.toml以构建其余文件?

小智 16

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


Fra*_*gné 6

Rust编译器同时编译所有文件以构建一个,它是一个可执行文件或一个库.要将文件添加到您的包中,请将mod项添加到您的包根(此处为main.rs)或其他模块:

mod boolean_example;
mod function_goodbye_world;
mod listdir;
mod looping;
mod pattern_match;
mod write_to_file;
Run Code Online (Sandbox Code Playgroud)

要从包根目录访问另一个模块中定义的项目,您必须使用模块名称限定该项目.例如,如果您有一个foo在模块中命名的函数looping,则必须将其称为looping::foo.

您还可以添加use语句以导入模块范围中的名称.例如,如果你添加use looping::foo;,那么你可以foo用来引用looping::foo.

有关更多信息,请参阅Rust Programming Language一书中有关Crates和Modules部分.


小智 5

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

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

[[example]]
name = "boolean" # examples/boolean.rs
Run Code Online (Sandbox Code Playgroud)

这使您可以调用您的示例 cargo run --example boolean

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