Skip to content

第三节、Cargo使用

使用cargo

前面的安装步骤完成后,系统里就安装了cargo.如用方法如下: 使用 Cargo 创建项目 让我们使用 Cargo 创建一个新项目,看看它与我们原来的“Hello, world!”有何不同。项目。导航回您的项目目录(或您决定存储代码的任何位置)。然后,在任何操作系统上,运行以下命令:

$ cargo new hello_cargo
$ cd hello_cargo
第一个命令创建一个名为hello_cargo的新目录。我们将项目命名为hello_cargo,Cargo 在同名目录中创建其文件。

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

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

注意:Git 是一个常见的版本控制系统。您可以使用该标志更改cargo new为使用不同的版本控制系统或不使用版本控制系统。--vcs运行cargo new --help以查看可用选项。

在您选择的文本编辑器中打开Cargo.toml 。

文件名:Cargo.toml

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]

示例:由生成的Cargo.toml的内容cargo new

该文件采用TOML(Tom's Obvious, Minimal Language)格式,这是 Cargo 的配置格式。

第一行[package]是一个节标题,指示以下语句正在配置包。随着我们向此文件添加更多信息,我们将添加其他部分。

接下来的三行设置 Cargo 编译程序所需的配置信息:名称、版本和要使用的 Rust 版本。

最后一行,[dependencies],是您列出项目的任何依赖项的部分的开始。在 Rust 中,代码包被称为 crates。这个项目我们不需要任何其他 crate,但我们将在第 2 章的第一个项目中使用,因此我们将使用这个依赖项部分。

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

文件名:src/main.rs

fn main() {
    println!("Hello, world!");
}
Cargo 生成了一个“Hello, world!” 为您准备的程序,就像我们在清单 1-1 中编写的程序一样!到目前为止,我们之前的项目与 Cargo 生成的项目的不同之处在于 Cargo 将代码放在了src 目录中,而我们在顶层目录中有一个Cargo.toml配置文件。

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

如果您启动了一个不使用 Cargo 的项目,就像我们使用“Hello, world!”所做的那样 项目,您可以将其转换为使用 Cargo 的项目。将项目代码移动到src目录并创建一个适当的Cargo.toml 文件。

建立和运行货运项目 现在让我们看看当我们构建和运行“Hello, world!”时有什么不同。与货物计划!在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)而不是在您的当前目录中创建一个可执行文件。您可以使用以下命令运行可执行文件:
$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows Hello, world!
如果一切顺利,Hello, world!应该打印到终端。第一次运行cargo build也会导致 Cargo 在顶层创建一个新文件:Cargo.lock。该文件跟踪项目中依赖项的确切版本。这个项目没有依赖,所以文件有点稀疏。您永远不需要手动更改此文件;Cargo 为您管理其内容。

我们刚刚构建了一个项目cargo build并使用 运行它 ./target/debug/hello_cargo,但我们也可以使用它cargo run来编译代码,然后在一个命令中运行生成的可执行文件:
$ cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs Running target/debug/hello_cargo Hello, world!
请注意,这次我们没有看到表明 Cargo 正在编译的输出 hello_cargo。Cargo 发现文件没有改变,所以它只运行二进制文件。如果您修改了源代码,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 ``` 为什么你不想要一个可执行文件?通常,cargo check比 快得多 cargo build,因为它跳过了生成可执行文件的步骤。如果您在编写代码时不断检查您的工作,使用cargo check将加快该过程!因此,许多 Rustaceans 在cargo check编写程序时会定期运行以确保它可以编译。然后它们cargo build在准备好使用可执行文件时运行。

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

我们可以使用cargo build. 我们可以使用cargo run. 我们可以在不生成二进制文件的情况下构建一个项目来使用 cargo check. Cargo 没有将构建结果保存在与我们的代码相同的目录中,而是将其存储在target/debug目录中。 使用 Cargo 的另一个优点是,无论您使用哪种操作系统,命令都是相同的。因此,此时,我们将不再提供针对 Linux 和 macOS 与 Windows 的具体说明。

为发布而构建

当您的项目最终准备好发布时,您可以使用cargo build --release优化来编译它。此命令将在target/release而不是target/debug中创建可执行文件。优化使您的 Rust 代码运行得更快,但打开它们会延长程序编译所需的时间。这就是为什么有两种不同的配置文件的原因:一个用于开发,当您想要快速且经常重建时,另一个用于构建您将提供给用户的最终程序,该程序不会重复重建并且运行速度与可能的。如果您要对代码的运行时间进行基准测试,请务必使用target/release ,cargo build --release中的可执行文件运行和基准测试。

对于简单的项目,Cargo 并没有提供比仅仅使用更多的价值 rustc,但是随着你的程序变得更加复杂,它会证明它的价值。对于由多个 crate 组成的复杂项目,让 Cargo 协调构建要容易得多。

尽管这个hello_cargo项目很简单,但它现在使用了很多你将在 Rust 职业生涯中使用的真正工具。事实上,要处理任何现有项目,您可以使用以下命令使用 Git 签出代码,切换到该项目的目录并构建:

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