Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

14.6 安装二进制 crate

14.6.1 从 crates.io 安装二进制 crate

通过 cargo install 命令可以从 crates.io 安装二进制 crate。这并不是为了替换系统包,它应该是 Rust 开发人员安装其他人共享工具的便捷方式。

它的限制是只能安装具有二进制目标(binary target)的 crate。binary target 是一个可执行程序,由拥有 src/main.rs 或其它被配置为二进制 crate 的包生成。

既然有 binary target 这个概念,那就会有 library target 这个概念。library target(库目标)无法单独运行。

通常,README.md 文件里会有关于 crate 的描述,会告诉你这个 crate 是否有 library target、是否有 binary target,或者两者都有。

14.6.2 cargo install

cargo install 安装的二进制文件存放在主目录下的 bin 文件夹中。

如果你使用默认的 rustup 配置安装 Rust,那么二进制存放目录是 $HOME/.cargo/bin

为了让 cargo install 所安装的程序能够直接执行,需要确保该目录在环境变量 $PATH 中。

例如,在第 12 章中,我们提到了 grep 工具的 Rust 实现,称为 ripgrep,用于搜索文件。要安装 ripgrep,我们可以运行:

$ cargo install ripgrep
    Updating crates.io index
  Downloaded ripgrep v13.0.0
  Downloaded 1 crate (243.3 KB) in 0.88s
  Installing ripgrep v13.0.0
......
   Compiling ripgrep v13.0.0
    Finished release [optimized + debuginfo] target(s) in 3m 10s
  Installing ~/.cargo/bin/rg
   Installed package `ripgrep v13.0.0` (executable `rg`)

中间省略了一部分,但大致就是这样。倒数第二行写到了程序被安装在 ~/.cargo/bin/rg

在终端使用 echo $PATH 就可以查看该目录是否在环境变量中。

14.6.3 使用自定义命令扩展 Cargo

Cargo 被设计为可以使用子命令来扩展。

举个例子,如果 $PATH 中的某个二进制文件名为 cargo-something,你可以通过运行 cargo something 来运行它,就像它是一个 Cargo 子命令一样。

当你运行 cargo --list 时,也会列出像这样的自定义命令。能够使用 cargo install 来安装扩展,然后像内置的 Cargo 工具一样运行它们,这是 Cargo 设计的一个非常方便的好处。