依赖项

crates.io是 Rust 社区的中央软件包注册表[package registry][def-package-registry],用于寻找和下载软件包。cargo 使用其作为默认软件源来查找需要的包。

要获取托管在crates.io的依赖库,只需将它添加到Cargo.toml

添加依赖

如果你的 Cargo.toml 还没有 [dependencies] 部分,添加这个条目,并在下面列举你所需要的依赖。下面的例子添加了一个 time crate:

[dependencies]
time = "0.1.12"

版本字符串是 SemVer (语义化版本) 的要求。指定依赖项的文档提供了更多相关信息。

如果我们想额外添加一个 regex 依赖,我们不需要为每个 crate 都添加 [dependencies]。只需要像如下文件一样,将所有的依赖条目,如 timeregex,置于 [dependencies] 下即可:

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

[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 文件包含了这些依赖项的具体版本信息。

现在,除非运行 cargo update 手动更新依赖版本,否则即便 regex 更新了,我们也会一直使用当前确定的版本进行构建。

于是现在你可以在 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