依赖项
大多数程序都依赖于一些库。如果你曾经手动管理过依赖项,你就会知道这有多痛苦。幸运的是,Rust 生态系统标配了 cargo
!cargo
可以管理项目的依赖项。
要创建一个新的 Rust 项目,
# A binary
cargo new foo
# A library
cargo new --lib bar
在本章的其余部分,我们假设我们正在创建一个二进制文件,而不是一个库,但所有的概念都是相同的。
在执行上述命令后,你应该看到如下的文件层次结构
.
├── bar
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
└── foo
├── Cargo.toml
└── src
└── main.rs
main.rs
是你的新 foo
项目的根源文件 -- 这没什么新鲜的。Cargo.toml
是该项目 cargo
的配置文件。如果你查看它的内部,你应该看到类似这样的内容
[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]
[dependencies]
[package]
下的 name
字段确定项目的名称。如果你发布 crate,它会被 crates.io
使用(稍后会详细介绍)。它也是编译时输出二进制文件的名称。
version
字段是使用 语义化版本控制 的 crate 版本号。
authors
字段是发布 crate 时使用的作者列表。
[dependencies]
部分允许你为你的项目添加依赖项。
例如,假设我们希望我们的程序有一个出色的 CLI。你可以在 crates.io(官方 Rust 包注册表)上找到许多优秀的软件包。一个流行的选择是 clap。在撰写本文时,clap
的最新发布版本是 2.27.1
。要将依赖项添加到我们的程序,我们只需在 Cargo.toml
的 [dependencies]
下添加以下内容:clap = "2.27.1"
。就这样!你就可以在你的程序中使用 clap
了。
cargo
还支持 其他类型的依赖项。这里只是一个小小的示例
[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]
[dependencies]
clap = "2.27.1" # from crates.io
rand = { git = "https://github.com/rust-lang-nursery/rand" } # from online repo
bar = { path = "../bar" } # from a path in the local filesystem
cargo
不仅仅是一个依赖管理器。所有可用的配置选项都列在 Cargo.toml
的 格式规范 中。
要构建我们的项目,我们可以在项目目录(包括子目录!)中的任何位置执行 cargo build
。我们也可以执行 cargo run
来构建和运行。请注意,这些命令将解析所有依赖项,在需要时下载 crates,并构建所有内容,包括你的 crate。(请注意,它只会重新构建它尚未构建的内容,类似于 make
)。
瞧!这就是全部!