Rust 003:Hello, Cargo!

120 阅读2分钟

Cargo 是 Rust 的构建系统和包管理工具。大部分“锈粉”(Rustaceans,指 Rust 语言爱好者)用它管理 Rust 项目,因为 Cargo 可以帮你处理很多任务,比如构建代码,下载依赖库,构建依赖库等。

最简单的 Rust 程序不需要任何依赖。当程序越来越复杂,会添加更多的依赖。使用 Cargo 可以更轻松的管理依赖。

使用如下命令检查 Cargo 是否正确安装:

$ cargo --version

使用 Cargo 创建项目

使用 Cargo 创建一个新项目,来感受一下与前面 Hello World 项目的不同。在 projects 目录下,执行如下命令:

$ cargo new hello_cargo
$ cd hello_cargo

第一个命令创建新目录 hello_cargo。进入目录,会发现 Cargo 已创建两个文件:Cargo.toml 文件和 src 目录,目录下有 main.rs 文件。

它还初始化了一个新的 Git 仓库,其中包含 .gitignore 文件。当在已经存在的 Git 仓库下执行 cargo new 时,不会产生 Git 文件;可以使用 cargo new --vcs=git 覆盖这个默认行为。

打开 Cargo.toml,它的内容如下:

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

[dependencies]

这个配置文件使用了 TOML 格式。

最后一行的 [dependencies],可以列举项目的依赖项。在 Rust 中,代码包称为 crates(板条箱)。

打开 src/main.rs

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

Cargo 期望所有源码位于 src 目录。根目录是用于 README 文件,版权信息,配置文件等与代码无关的内容。

构建运行 Cargo 项目

构建项目使用如下命令:

$ cargo build

这个命令创建可执行文件 target/debug/hello_cargo。使用如下命令执行它:

$ ./target/debug/hello_cargo
Hello, world!

第一次执行 cargo build 时,还会在根目录创建新文件 Cargo.lock。这个文件会追踪依赖库的精确版本。因为当前项目没有依赖,所以里面的内容很少。无需手动修改这个文件,Cargo 会自动管理它的内容。

我们刚刚使用 cargo build 编译项目,并使用 ./target/debug/hello_cargo 运行项目,其实我们还可以使用 cargo run,一条指令实现编译源码和运行程序:

$ cargo run

Cargo 还提供了 cargo check 工具。它快速检查代码,保证它可以成功编译,但是不输出可执行文件。

$ cargo check

为什么不需要可执行文件呢?cargo check 通常比 cargo build 快很多,因为它无需创建可执行文件。如果在编写代码时,时不时检查代码,使用 cargo check 会让整个流程提速。

关于 Cargo 的知识做个小结:

  • 使用 cargo build 编译项目;
  • 使用 cargo run 编译并运行项目;
  • 使用 cargo check 检查项目状况,不产生二进制文件;
  • Cargo 把构建结果存放到 target/debug 目录;

Cargo 的另一个额外优势在于,无论你的操作系统是什么,命令都是一样的。

发布构建

当你的项目准备发布,使用 cargo build --release 优化编译。这个命令会在 target/release 创建可执行文件。优化让代码执行更快,但会增加编译时间。这也是有两种开发配置的原因:一个用于开发,方便快速编译;一个用于最终发布,不用反复编译,但是执行速度很快。当衡量代码运行速度时,记得使用 cargo build --release 命令。

参考文档