依赖

crates.io 是 Rust 社区主要的 包注册中心 。 是搜索和下载 packages 的仓库。 cargo 默认使用这个地址来搜索所需的包。

要添加 crates.io 上托管的库,你需要将库添加到 Cargo.toml

添加依赖

如果你的 Cargo.toml 还没有 [dependencies] 部分,添加上这个标记, 然后在标记下方列出你需要使用的 crate 的名称和版本。 下面这个例子展示了如何添加 time 依赖:

[dependencies]
time = "0.1.12"

描述版本的字符串要求使用 SemVer "语义化版本"规范。对此 specifying dependencies 部分有更多信息。

如果我们想添加一个 regex 依赖,则不需要为每个依赖都添加 [dependencies] 。 下面是 Cargo.toml 文件添加 timeregex 依赖的范例:

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

[dependencies]
time = "0.1.12"
regex = "0.1.41"

重新执行 cargo build 命令,Cargo 会下载新的依赖以及依赖本身所需的依赖, 全部编译,并更新 Cargo.lock 文件:

$ cargo build
      Updating crates.io index
   Downloading memchr v0.1.5
   Downloading libc v0.1.10
   Downloading regex-syntax v0.2.1
   Downloading memchr v0.1.5
   Downloading aho-corasick v0.3.0
   Downloading regex v0.1.41
     Compiling memchr v0.1.5
     Compiling libc v0.1.10
     Compiling regex-syntax v0.2.1
     Compiling memchr v0.1.5
     Compiling aho-corasick v0.3.0
     Compiling regex v0.1.41
     Compiling hello_world v0.1.0 (file:///path/to/package/hello_world)

Cargo.lock 文件包含着所有依赖准确的版本信息。

如果 regex 依赖升级了,仍然会使用当前的版本进行构建,除非手动执行 cargo update 命令。

现在可以在 main.rs 中使用 regex 库了。

use regex::Regex;

fn main() {
    let re = Regex::new(r"^\d{4}-\d{2}-\d{2}$").unwrap();
    println!("Did our date match? {}", re.is_match("2014-01-01"));
}

运行它会输出:

$ cargo run
   Running `target/hello_world`
Did our date match? true