依赖

crates.io是Rust社区主要的项目注册的地方,也是查找和下载项目的地方。cargo被配置为默认使用它来查找需要的项目。

要依赖一个寄放在crates.io的库,只需要将它添加到你的Cargo.toml文件。

添加一个依赖

如果你的Cargo.toml没有[dependencies]区域,将其添加进去,然后在该区域列出你想使用的依赖的项目的名称和版本。这个例子中,添加了一个time程序包依赖:

[dependencies]
time = "0.1.12"

版本字符串符合semver版本命名要求。指明依赖 一节有更多可用信息。

如果我们同样想添加regex项目依赖,我们不需要为每个列出项目添加[dependencies],以下是依赖timeregex两个项目的Cargo.toml文件的内容:

[package]
name = "hello_world"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]

[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中通过extern crate使用regex库。

extern crate 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