您好,Cargo!

Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean 使用此工具 来管理他们的 Rust 项目,因为 Cargo 会为你处理很多任务, 例如构建代码、下载代码所依赖的库,以及 构建这些库。(我们将代码需要的库称为依赖项

最简单的 Rust 程序,比如我们目前编写的那个,没有任何 依赖。如果我们用 Cargo 构建了 “Hello, world!” 项目,它会 仅使用 Cargo 中处理构建代码的部分。随着您编写更多内容 复杂的 Rust 程序,您将添加依赖项,如果您启动一个项目 使用 Cargo ,添加依赖项会容易得多。

因为绝大多数 Rust 项目都使用 Cargo,所以本书的其余部分 假设你也在使用 Cargo。Cargo 随 Rust 一起安装,如果你 使用了 “安装” 一节中讨论的官方安装程序。如果您安装了 Rust 通过其他方式,输入 在您的终端中关注:

$ cargo --version

如果您看到版本号,则表示您拥有它!如果您看到错误,例如 ,请查看您的安装方法的文档 确定如何单独安装 Cargo。command not found

使用 Cargo 创建项目

让我们使用 Cargo 创建一个新项目,看看它与我们的 最初的 “Hello, world!” 项目。导航回 projects 目录 (或您决定存储代码的任何地方)。然后,在任何作系统上, 运行以下命令:

$ cargo new hello_cargo
$ cd hello_cargo

第一个命令将创建一个名为 hello_cargo 的新目录和项目。 我们将项目命名为 hello_cargo,Cargo 在 目录。

进入 hello_cargo 目录并列出文件。您将看到 Cargo 为我们生成了两个文件和一个目录:一个 Cargo.toml 文件和一个 src 目录,其中包含一个 main.rs 文件。

它还初始化了一个新的 Git 存储库以及一个 .gitignore 文件。 如果您在现有 Git 中运行,则不会生成 Git 文件 存储 库;您可以使用 .cargo newcargo new --vcs=git

注意:Git 是一种常见的版本控制系统。您可以更改为 使用其他版本控制系统或不使用版本控制系统 国旗。运行 以查看可用选项。cargo new--vcscargo new --help

在您选择的文本编辑器中打开 Cargo.toml。它看起来应该类似于 代码。

文件名: Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
示例 1-2: 由cargo new

此文件位于 TOMLTom's Obvious, Minimal Language) 格式,这是 Cargo 的配置格式。

第一行 , 是一个节标题,指示 以下语句用于配置软件包。随着我们向 这个文件,我们将添加其他部分。[package]

接下来的三行设置 Cargo 需要编译的配置信息 您的程序:要使用的 Rust 的名称、版本和版本。我们再谈 关于附录 E 中的密钥。edition

最后一行 是部分的开头,供您列出任何 的项目依赖项。在 Rust 中,代码包称为 crate。这个项目不需要任何其他 crate,但我们会在 第一个项目,所以我们将使用这个 dependencies 部分。[dependencies]

现在打开 src/main.rs 并查看:

文件名: src/main.rs

fn main() {
    println!("Hello, world!");
}

Cargo 为您生成了一个 “Hello, world!” 程序,就像我们一样 写在示例 1-1 中!到目前为止,我们的项目与 project Cargo 生成的都是 Cargo 将代码放在 src 目录下 我们在 top 目录中有一个 Cargo.toml 配置文件。

Cargo 期望你的源文件位于 src 目录中。这 顶级项目目录仅用于 README 文件、许可证信息、 配置文件,以及与代码无关的任何其他内容。使用 Cargo 帮助您组织项目。一切都有地方,而且 一切都在它的位置上。

如果您启动了一个不使用 Cargo 的项目,就像我们对 Hello, world!“项目,你可以将其转换为使用 Cargo 的项目。将 project 代码复制到 src 目录中,并创建一个合适的 Cargo.toml 文件。获取 Cargo.toml 文件的一种简单方法是运行 ,它 将自动为您创建它。cargo init

构建和运行 Cargo 项目

现在,让我们看看在构建和运行“Hello, world!” 与 Cargo 一起编程!在 hello_cargo 目录中,通过以下方式构建项目 输入以下命令:

$ cargo build
   Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs

此命令在 target/debug/hello_cargo(或 Windows 上的 target\debug\hello_cargo.exe)中创建可执行文件,而不是在当前 目录。因为默认构建是调试构建,所以 Cargo 将二进制文件放入 名为 debug 的目录。您可以使用以下命令运行可执行文件:

$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
Hello, world!

如果一切顺利,应打印到终端。第一次运行也会导致 Cargo 在顶部创建一个新文件 level: Cargo.lock 的 Cargo.lock 中。此文件跟踪 dependencies 中的依赖项。此项目没有依赖项,因此 file 有点稀疏。您永远不需要手动更改此文件;货物 为您管理其内容。Hello, world!cargo build

我们只是使用 构建了一个项目并使用 运行它,但我们也可以使用它来编译 代码,然后在一个命令中运行生成的可执行文件:cargo build./target/debug/hello_cargocargo run

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/hello_cargo`
Hello, world!

使用比必须记住运行然后使用二进制文件的整个路径更方便,因此大多数开发人员使用 .cargo runcargo buildcargo run

请注意,这次我们没有看到指示 Cargo 正在编译 .Cargo 发现文件没有更改,因此没有 rebuild,但只运行了二进制文件。如果您修改了源代码,则 Cargo 会在运行项目之前重新构建项目,并且您会看到此 输出:hello_cargo

$ cargo run
   Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
     Running `target/debug/hello_cargo`
Hello, world!

Cargo 还提供了一个名为 .此命令快速检查 确保代码能够编译但不生成可执行文件:cargo check

$ cargo check
   Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs

为什么不想要可执行文件?通常,比因为它跳过生成可执行文件的步骤要快得多。如果你是 在编写代码时不断检查您的工作,使用 Will 加快让您知道您的项目是否仍在编译的过程!如 因此,许多 Rustacean 在编写 程序来确保它能够编译。然后他们在 准备好使用可执行文件。cargo checkcargo buildcargo checkcargo checkcargo build

让我们回顾一下到目前为止我们对 Cargo 的了解:

  • 我们可以使用 .cargo new
  • 我们可以使用 .cargo build
  • 我们可以使用 一步构建和运行项目。cargo run
  • 我们可以构建一个项目,而无需生成二进制文件来使用 .cargo check
  • 而不是将构建结果保存在与我们的代码相同的目录中, Cargo 将其存储在 target/debug 目录中。

使用 Cargo 的另一个优点是命令是相同的 无论您正在使用哪个作系统。所以,在这一点上,我们不会 longer 提供了 Linux 和 macOS 与 Windows 的具体说明。

为发布而构建

当您的项目最终准备好发布时,您可以使用 to 编译它并进行优化。此命令将创建一个 executable 在 target/release 而不是 target/debug 中。优化 使 Rust 代码运行得更快,但打开它们会延长时间 以便编译程序。这就是为什么有两种不同的配置文件:一种 用于开发,当您想要快速、频繁地重建时,另一个用于 构建您将提供给用户的最终程序,该程序不会重新构建 这将尽可能快地运行。如果您正在对 代码的运行时间,请务必使用 target/release 中的可执行文件。cargo build --releasecargo build --release

Cargo as Convention

对于简单的项目,Cargo 并不比仅使用 提供很多价值,但随着您的程序变得更加复杂,它将证明它的价值。 一旦程序增长到多个文件或需要一个依赖项,就更容易 让 Cargo 协调构建。rustc

尽管该项目很简单,但它现在使用了大部分实际的 您将在 Rust 职业生涯的其余部分中使用的工具。事实上,要在任何 现有项目,您可以使用以下命令签出代码 使用 Git 切换到该项目的目录,然后构建:hello_cargo

$ git clone example.org/someproject
$ cd someproject
$ cargo build

有关 Cargo 的更多信息,请查看其文档

总结

您的 Rust 之旅已经有一个良好的开端!在本章中, 您已了解如何:

  • 使用rustup
  • 更新到较新的 Rust 版本
  • 打开本地安装的文档
  • 直接使用编写并运行一个 “Hello, world!” 程序rustc
  • 使用 Cargo 的约定创建并运行一个新项目

这是构建更实质性的计划来习惯阅读的好时机 以及编写 Rust 代码。因此,在第 2 章中,我们将构建一个猜谜游戏程序。 如果您更愿意从学习常见的编程概念如何开始 Rust,请参阅第 3 章,然后返回第 2 章。

本文档由官方文档翻译而来,如有差异请以官方英文文档(https://doc.rust-lang.org/)为准