一个 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 编译器来构建库或二进制文件。