跳到主要内容

Rust箱子和包

提示
  1. crate 的类型和定义:Rust 有两种类型的 crate:二进制 crate(编译成可执行文件,有 main() 函数)和库 crate(定义共享功能,不编译成可执行文件)。
  2. 创建 Rust package:使用 Cargo 包管理器创建 packages,一个 package 可包含多个 crate(二进制或库),但最多只有一个库 crate。
  3. package 结构和内容:package 目录包括 Cargo.toml 文件(存储元数据)和 src 目录(包含源代码,如 main.rslib.rs),一个 package 可同时包含二进制和库 crate。

一个 crate 可以包含一个或多个 Rust 模块,这些模块中又可以包含代码,例如函数、类型和常量。

crate 有两种类型:

  • 二进制 crate
  • 库 crate

二进制 crate 是一个编译成一个或多个可执行文件的 Rust 程序,每个可执行文件都有一个 main() 函数。

库 crate 不编译成可执行文件,也没有 main() 函数。库 crate 通常定义了可在多个项目中使用的共享功能。

crates 可以被捆绑在一起,形成一个 package。

在 Rust 中创建 Package

可以使用内置于 Rust 中的 Cargo 包管理器 来创建 packages。Cargo 与 Rust 一起预装。

我们可以使用 cargo 来创建一个 package。一个 package 包含一个或多个提供一组功能的 crates。

注意: 一个 package 可以包含许多二进制 crate,但最多只能有一个库 crate。

在 Rust 中创建二进制 Package

要创建二进制 package,我们可以在终端中使用 cargo 命令。

$ cargo new hello_world --bin

输出

Created binary (application) `hello_world` package

我们使用 cargo--bin 选项创建了一个名为 hello_world 的二进制 package。这是 cargo 的默认行为。

让我们看看 hello_world package 的内容。

hello_world
├── Cargo.toml
└── src
└── main.rs

这里,

  • hello_world 是 package 目录
  • Cargo.toml 是一个包含有关 crate 的元数据的文件,如其名称、版本和依赖关系
  • src/main.rs 是 crate 的根目录,包含二进制 package 的源代码

在 Rust 中创建库 Package

同样,我们可以使用 cargo 在 Rust 中创建一个库 package。

$ cargo new hello_world_lib --lib

输出

Created library `hello_world_lib` package

我们使用 cargo 和 --lib 选项创建了一个名为 hello_world_lib 的库 package。

让我们看看 hello_world_lib package 的内容。

hello_world_lib
├── Cargo.toml
└── src
└── lib.rs

这里,

  • hello_world_lib 是 package 目录
  • Cargo.toml 是一个包含有关 crate 的元数据的文件,如其名称、版本和依赖关系
  • src/lib.rs 是 crate 的根目录,包含库 package 的源代码

一个 package 可以包含 src/main.rssrc/lib.rs。在这种情况下,它有两个 crates:一个二进制和一个库,两者都与 package 同名。例如,

hello_world
├── Cargo.toml
└── src
└── lib.rs
└── main.rs

注意: 按照惯例,Cargo 会将 crate 的根文件传递给 Rust 编译器来构建库或二进制文件。