软件包和板条箱
我们将介绍的模块系统的第一部分是 package 和 crate。
crate 是 Rust 编译器在
时间。即使您运行而不是传递单个源代码
文件(就像我们在 “编写和运行 Rust 程序” 中所做的那样
部分),编译器会将该文件视为 crate。箱子
可以包含模块,并且模块可以在其他获取
使用 crate 编译,我们将在后面的章节中看到。rustc
cargo
crate 可以有两种形式之一:二进制 crate 或库 crate。Binary crate 是你可以编译成可以运行的可执行文件的程序,
例如命令行程序或服务器。每个 Secret 都必须有一个 function called 来定义可执行文件运行时发生的情况。我们拥有的所有板条箱
到目前为止创建的是二进制 crate。main
库 crate 没有函数,它们不会编译为
可执行。相反,它们定义了要与之共享的功能
多个项目。例如,我们在 Chapter 中使用的 crate
2 提供生成随机数的功能。
大多数时候,当 Rustacean 说 “crate” 时,他们指的是库 crate,而他们
将 “crate” 与 “library” 的一般编程概念互换使用。main
rand
crate 根是 Rust 编译器从源文件开始并生成的 向上是 crate 的根模块(我们将在 “定义模块以控制范围和隐私” 一节中深入解释模块)。
软件包是一个或多个 crate 的捆绑包,它提供一组 功能性。包包含一个 Cargo.toml 文件,该文件描述了如何 建造那些板条箱。Cargo 实际上是一个包含二进制 crate 的包 对于您用于构建代码的命令行工具。货物 package 还包含 binary crate 所依赖的 library crate。其他 项目可以依赖 Cargo 库 crate 来使用与 Cargo 相同的逻辑 命令行工具使用。一个 package 可以包含任意数量的二进制 crate like,但最多只有一个 library crate。一个包必须至少包含一个 crate,无论是库还是二进制 crate。
让我们来看看创建 package 时会发生什么。首先,我们输入
命令:cargo new my-project
$ cargo new my-project
Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs
运行 后,我们用于查看 Cargo 创建的内容。在
project 目录中,有一个 Cargo.toml 文件,为我们提供了一个包。
还有一个包含 main.rs 的 src 目录。在 中打开 Cargo.toml
您的文本编辑器,请注意,没有提到 src/main.rs。Cargo 遵循
约定 src/main.rs 是具有相同
name 作为包。同样,Cargo 知道如果 package 目录
包含 src/lib.rs,则软件包包含一个同名的库 crate
作为包,src/lib.rs 是它的 crate 根。货物通过 crate 根
文件来构建库或二进制文件。cargo new my-project
ls
rustc
在这里,我们有一个只包含 src/main.rs 的包,这意味着它只包含 src/main.rs
包含名为 的二进制 crate。如果一个包包含 src/main.rs 和 src/lib.rs,它有两个 crate:一个 binary 和一个 library,它们具有相同的
name 作为包。一个包可以通过放置文件来拥有多个二进制 crate
在 src/bin 目录中:每个文件都将是一个单独的二进制 crate。my-project
本文档由官方文档翻译而来,如有差异请以官方英文文档(https://doc.rust-lang.org/)为准