入门 The Cargo Team 2026-09-13 15:48:21 · 0 阅读

第3章 为什么需要 Cargo

预备知识

你可能已经知道,在 Rust 中,库或可执行程序都叫做 crate,由 Rust 编译器 rustc 负责编译。刚接触 Rust 时,大多数人写的第一段代码都是经典的“hello world”程序,直接调用 rustc 来编译:

$ rustc hello.rs
$ ./hello
Hello, world!

注意,上面的命令必须显式指定文件名。换一个程序,命令行参数也得跟着变。如果还需要指定编译选项或引入外部依赖,命令会更加具体(也更复杂)。

此外,稍具规模的项目几乎都依赖外部库,而这些库又会传递性地依赖其他库。如果靠手动获取所有依赖的正确版本并保持更新,既繁琐又容易出错。

与其直接和 crate、rustc 打交道,不如引入更高层次的package(包)”抽象,并借助包管理器,就能省去上述种种麻烦。

Cargo 登场

Cargo 是 Rust 的包管理器。它让 Rust package 能够声明各自的依赖,并确保每次构建结果都可复现。

为此,Cargo 做了四件事:

  • 提供两个元数据文件,记录包的各种信息。
  • 获取并构建包的依赖。
  • 以正确的参数调用 rustc 或其他构建工具来编译你的包。
  • 建立一套约定,让使用 Rust 包更加轻松。

Cargo 在很大程度上统一了构建特定程序或库所需的命令,这也是上文提到的一贯原则的体现之一。正如后文所示,无论产物叫什么名字,你都可以用同一条命令来构建不同类型的artifact。你无需直接调用 rustc,而只需运行 cargo build 这样通用、简洁的命令,剩下的活儿交给 Cargo 去操心,它会自动拼装出正确的 rustc 调用参数。此外,Cargo 还会自动从 registry 拉取你为当前 artifact 定义的所有依赖项,并按需将它们纳入构建过程。

说"学会构建一个基于 Cargo 的项目,也就学会了构建所有此类项目",这话虽然略有夸张,但基本成立。

评论 (0)