一个 crate 可以包含一个或多个 Rust 模块,模块又可以包含代码,例如函数、类型和常量。
Crate 有两种类型
- 二进制 Crate
- 库 Crate
一个二进制 crate 是一个编译成可执行文件或多个可执行文件的 Rust 程序,并且每个可执行文件都有一个 main() 函数。
一个库 crate 不会编译成可执行文件,也没有 main() 函数。库 crate 通常定义了可以在多个项目中使用的共享功能。
Crate 可以被打包成一个 package。
在 Rust 中创建包
可以使用 Rust 内置的 Cargo 包管理器来创建包。Cargo 随 Rust 一起预装。
我们可以使用 cargo 创建一个包。一个包包含一个或多个 crate,它们提供一组功能。
注意:一个包可以包含多个二进制 crate,但最多只能包含一个库 crate。
在 Rust 中创建二进制包
要创建二进制包,我们可以在终端中使用 cargo 命令。
$ cargo new hello_world --bin
输出
Created binary (application) `hello_world` package
我们使用 cargo 和 --bin 选项创建名为 hello_world 的二进制包。这是 cargo 的默认行为。
让我们看一下 hello_world 包的内容。
hello_world
├── Cargo.toml
└── src
└── main.rs
这里,
hello_world是包目录Cargo.toml是一个包含 crate 元数据的文件,例如其名称、版本和依赖项src/main.rs是 crate 的根文件,包含二进制包的源代码
在 Rust 中创建库包
同样,我们也可以使用 cargo 在 Rust 中创建库包。
$ cargo new hello_world_lib --lib
输出
Created library `hello_world_lib` package
我们使用 cargo 和 --lib 选项创建名为 hello_world_lib 的库包。
让我们看一下 hello_world_lib 包的内容。
hello_world_lib
├── Cargo.toml
└── src
└── lib.rs
这里,
hello_world_lib是包目录Cargo.toml是一个包含 crate 元数据的文件,例如其名称、版本和依赖项src/lib.rs是 crate 的根文件,包含库包的源代码
一个包可以包含 src/main.rs 和 src/lib.rs。在这种情况下,它有两个 crate:一个二进制和一个库,它们的名称都与包相同。例如,
hello_world
├── Cargo.toml
└── src
└── lib.rs
└── main.rs
注意:Cargo 按照惯例将 crate 的根文件传递给 Rust 编译器来构建库或二进制文件。