01-cargo add

cargo-add(1) 添加依赖

译文 · 基于 The Cargo Book

cargo-add(1)

原文链接: https://doc.rust-lang.org/cargo/commands/cargo-add.html

名称

cargo-add — 向 Cargo.toml 清单文件添加依赖

大纲

cargo add [options] crate…
cargo add [options] --path path
cargo add [options] --git url [crate…]

描述

此命令可以添加或修改依赖。

可用以下方式指定依赖的源:

  • crate@version:从注册表获取,版本约束为 “version”
  • --path path:从指定 path 获取
  • --git url:从 url 处的 git 仓库拉取

若未指定源,将尽最大努力选择一个,包括:

  • 其他表中的现有依赖(如 dev-dependencies)
  • 工作空间成员
  • 注册表中的最新发布

当你添加已存在的包时,现有条目将用指定的标志更新。

成功调用后,指定依赖已启用(+)与已禁用(-)的特性(features)将列在命令输出中。

选项

源选项

--git url

要从中添加指定 crate 的 Git URL。

--branch branch

从 git 添加时使用的分支。

--tag tag

从 git 添加时使用的标签。

--rev sha

从 git 添加时使用的特定提交。

--path path

要添加的本地 crate 的文件系统路径。

--base base

添加本地 crate 时使用的 path base。

不稳定(仅 nightly)

--registry registry

要使用的注册表名称。注册表名称在 Cargo 配置 文件中定义。若未指定,则使用默认注册表, 由 registry.default 配置键定义,默认为 crates-io。

节选项

--dev

添加为开发依赖。

--build

添加为构建依赖。

--target target

添加为给定目标平台的依赖。

为避免意外的 shell 展开,可对每个 target 使用引号,例如 --target 'cfg(unix)'。

依赖选项

--dry-run

实际上不写入清单

--rename name

重命名依赖。

--optional

将依赖标记为可选。

--no-optional

将依赖标记为必需。

--public

将依赖标记为公有。

该依赖可在你的库的公共 API 中引用。

不稳定(仅 nightly)

--no-public

将依赖标记为私有。

虽然你可以在实现中使用该 crate,但不能在公共 API 中引用它。

不稳定(仅 nightly)

--no-default-features

禁用默认特性。

--default-features

重新启用默认特性。

-F features
--features features

空格或逗号分隔的要激活的特性列表。添加多个 crate 时,可用 package-name/feature-name 语法启用特定 crate 的特性。此标志可指定多次, 以启用所有指定的特性。

显示选项

-v
--verbose

使用详细输出。可指定两次以获得“非常详细”的输出,其中包含依赖警告与构建脚本输出等额外信息。 也可通过 term.verbose 配置值 指定。

-q
--quiet

不打印 cargo 日志消息。 也可通过 term.quiet 配置值 指定。

--color when

控制何时使用彩色输出。有效值:

  • auto(默认):自动检测终端是否支持颜色。
  • always:始终显示颜色。
  • never:从不显示颜色。

也可通过 term.color 配置值 指定。

清单选项

--manifest-path path

Cargo.toml 文件的路径。默认情况下,Cargo 在当前目录或任意父目录中搜索 Cargo.toml 文件。

-p spec
--package spec

仅向指定包添加依赖。

--ignore-rust-version

忽略包中的 rust-version 规范。

--locked

断言使用的依赖与版本与最初生成现有 Cargo.lock 文件时完全相同。出现以下任一情况时 Cargo 将以错误退出:

  • 锁文件缺失。
  • Cargo 因不同的依赖解析而试图更改锁文件。

可用于需要确定性构建的环境,例如 CI 流水线。

--offline

阻止 Cargo 以任何理由访问网络。若未指定此标志,当 Cargo 需要访问网络而网络不可用时会以错误停止。指定此标志后,Cargo 会在可能时尝试在无网络情况下继续。

请注意,这可能导致与在线模式不同的依赖解析。Cargo 会将自身限制为本地已下载的 crate,即便本地索引副本表明可能有更新版本。 可先使用 cargo-fetch(1) 命令下载依赖再离线。

也可通过 net.offline 配置值 指定。

--frozen

等价于同时指定 --locked 与 --offline。

通用选项

+toolchain

若 Cargo 通过 rustup 安装,且传给 cargo 的第一个参数以 + 开头,则会被解释为 rustup 工具链名称(例如 +stable 或 +nightly)。 关于工具链覆盖如何工作,见 rustup 文档。

--config KEY=VALUE or PATH

覆盖 Cargo 配置值。参数应为 TOML 语法的 KEY=VALUE, 或指向额外配置文件的路径。此标志可指定多次。 更多信息见 命令行覆盖一节。

-C PATH

在执行任何指定操作之前更改当前工作目录。这会影响 Cargo 默认查找项目清单(Cargo.toml)的位置,以及 用于发现 .cargo/config.toml 的目录搜索等。此选项必须 出现在命令名称之前,例如 cargo -C path/to/my-project build。

此选项仅在 nightly 通道 上可用,且 需要 -Z unstable-options 标志才能启用(见 #10098)。

-h
--help

打印帮助信息。

-Z flag

Cargo 的不稳定(仅 nightly)标志。运行 cargo -Z help 查看详情。

环境

关于 Cargo 读取的环境变量详情,见参考文档。

退出状态

  • 0:Cargo 成功。
  • 101:Cargo 未能完成。

示例

  1. 添加依赖 regex

    cargo add regex
    
  2. 添加开发依赖 trybuild

    cargo add --dev trybuild
    
  3. 添加较旧版本的 nom 作为依赖

    cargo add nom@5
    
  4. 添加用 derive 将数据结构序列化为 json 的支持

    cargo add serde serde_json -F serde/derive
    
  5. 在 cfg(windows) 上添加平台特定依赖 windows

    cargo add windows --target 'cfg(windows)'
    

参见

cargo(1), cargo-remove(1)

最后修改 August 11, 2026: 更新 (70a5af133)