入门 The Cargo Team 2026-09-13 15:48:22 · 0 阅读

第48章 Cargo Add:向 Rust 项目添加依赖

名称

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

概要

cargo add [选项] crate
cargo add [选项] --path path
cargo add [选项] --git url [crate…]

描述

该命令用于添加或修改依赖。

可以通过以下方式指定依赖来源:

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

若未指定来源,命令会尝试自动选择最佳来源,包括:

  • 其他表(如 dev-dependencies)中已存在的依赖
  • Workspace 成员
  • Registry 中的最新发布版本

添加已存在的包时,现有条目会根据指定的标志进行更新。

调用成功后,输出结果中会列出指定依赖已启用(+)和已禁用(-)的 features

选项

来源选项

--git url

用于添加指定 crate 的 Git URL

--branch branch

从 Git 添加时使用的分支。

--tag tag

从 Git 添加时使用的标签。

--rev sha

从 Git 添加时使用的特定 commit。

--path path

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

--base base

添加本地 crate 时使用的路径基准

不稳定(仅限 Nightly 渠道)

--registry registry

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

章节选项

--dev

作为开发依赖添加。

--build

作为构建依赖添加。

--target target

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

为避免意外的 Shell 展开,建议给每个目标加上引号,例如:--target 'cfg(unix)'

依赖选项

--dry-run

仅模拟执行,不实际写入清单文件

--rename name

重命名该依赖。

--optional

将该依赖标记为可选(optional)

--no-optional

将该依赖标记为必需(required)

--public

将该依赖标记为公开。

该依赖可以在库的公开 API 中被引用。

不稳定(仅 nightly 版可用)

--no-public

将该依赖标记为私有。

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

不稳定(仅 nightly 版可用)

--no-default-features

禁用默认特性(default features)

--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 会在当前目录或其父目录中查找该文件。

-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=VALUEPATH

覆盖 Cargo 的配置项。参数可以是 KEY=VALUE 形式的 TOML 语法,也可以是一个额外配置文件的路径。此标志可以指定多次。更多信息请参阅命令行覆盖一节。

-C PATH

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

此选项仅在 nightly channel 上可用,并且需要启用 -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)

评论 (0)