cargo-tree(1)
名称
cargo-tree — 显示依赖关系图的树形结构
概要
cargo tree
[选项]
描述
此命令将向终端显示依赖项树。 这是一个依赖于“rand”包的简单项目的示例
myproject v0.1.0 (/myproject)
└── rand v0.7.3
├── getrandom v0.1.14
│ ├── cfg-if v0.1.10
│ └── libc v0.2.68
├── libc v0.2.68 (*)
├── rand_chacha v0.2.2
│ ├── ppv-lite86 v0.2.6
│ └── rand_core v0.5.1
│ └── getrandom v0.1.14 (*)
└── rand_core v0.5.1 (*)
[build-dependencies]
└── cc v1.0.50
标记为 (*)
的包已被“去重”。 该包的依赖项已在图中的其他位置显示,因此不再重复。 使用 --no-dedupe
选项可以重复显示重复项。
-e
标志可用于选择要显示的依赖项类型。 “features”类型会更改输出以显示每个依赖项启用的功能。 例如,cargo tree -e features
myproject v0.1.0 (/myproject)
└── log feature "serde"
└── log v0.4.8
├── serde v1.0.106
└── cfg-if feature "default"
└── cfg-if v0.1.10
在此树中,myproject
依赖于启用了 serde
功能的 log
。 log
又依赖于具有“默认”功能的 cfg-if
。 使用 -e features
时,使用 -i
标志来显示功能如何流入包可能会有所帮助。 有关更多详细信息,请参见下面的示例。
功能统一
此命令显示的图形更接近于 Cargo 将构建的功能统一图形,而不是您在 Cargo.toml
中列出的图形。 例如,如果您在 [dependencies]
和 [dev-dependencies]
中都指定了相同的依赖项,但启用了不同的功能。 此命令可能会合并所有功能,并在其中一个依赖项上显示 (*)
以指示重复。
因此,对于与 cargo build
所做工作大致相同的概述,cargo tree -e normal,build
非常接近; 对于与 cargo test
所做工作大致相同的概述,cargo tree
非常接近。 但是,它不能保证与 Cargo 将要构建的内容完全等效,因为编译很复杂,并且取决于许多不同的因素。
要了解有关功能统一的更多信息,请查看此专用部分。
选项
树选项
-i
规范--invert
规范- 显示给定包的反向依赖项。 此标志将反转树并显示依赖于给定包的包。
请注意,在工作空间中,默认情况下,它只会在当前目录中工作空间成员的树中显示包的反向依赖项。
--workspace
标志可用于扩展它,以便它显示整个工作空间中包的反向依赖项。-p
标志可用于仅使用提供给-p
的包的子树来显示包的反向依赖项。 --prune
规范- 从依赖树的显示中修剪给定的包。
--depth
深度- 依赖树的最大显示深度。 例如,深度为 1 将显示直接依赖项。
--no-dedupe
- 不要去重重复的依赖项。 通常,当一个包已经显示了它的依赖项时,进一步的出现将不会重新显示它的依赖项,并且将包含一个
(*)
来指示它已经被显示过。 此标志将导致重复那些重复项。 -d
--duplicates
- 仅显示具有多个版本的依赖项(隐含
--invert
)。 与-p
标志一起使用时,仅显示给定包的子树中的重复项。避免多次构建同一个包有利于缩短构建时间和可执行文件大小。 此标志可以帮助识别有问题的包。 然后,您可以调查依赖于旧版本的重复项的包是否可以更新到较新的版本,以便只构建一个实例。
-e
类型--edges
类型- 要显示的依赖项类型。 接受以逗号分隔的值列表
all
— 显示所有边类型。normal
— 显示普通依赖项。build
— 显示构建依赖项。dev
— 显示开发依赖项。features
— 显示每个依赖项启用的功能。 如果这是唯一给定的类型,那么它将自动包含其他依赖项类型。no-normal
- 不要包含普通依赖项。no-build
- 不要包含构建依赖项。no-dev
- 不要包含开发依赖项。no-proc-macro
- 不要包含过程宏依赖项。
normal
、build
、dev
和all
依赖项类型不能与no-normal
、no-build
或no-dev
依赖项类型混合使用。默认值为
normal,build,dev
。 --target
目标三元组- 过滤与给定 目标三元组 匹配的依赖项。默认值为宿主平台。使用值
all
包含*所有*目标。
树形格式选项
--charset
字符集- 选择用于树的字符集。有效值为 “utf8” 或 “ascii”。如果未指定,cargo 将自动选择一个值。
-f
格式--format
格式- 设置每个包的格式字符串。默认值为 “{p}”。
这是一个任意字符串,将用于显示每个包。以下字符串将被替换为相应的值
{p}
- 包名。{l}
- 包许可证。{r}
- 包仓库 URL。{f}
- 已启用的包功能的逗号分隔列表。{lib}
- 包库的名称,在use
语句中使用。
--prefix
前缀- 设置每行的显示方式。前缀值可以是以下之一
indent
(默认值)- 将每行缩进显示为树形结构。depth
- 显示为列表,并在每个条目之前打印数字深度。none
- 显示为平面列表。
包选择
默认情况下,当未给出包选择选项时,所选包取决于所选的清单文件(如果未给出 --manifest-path
,则基于当前工作目录)。如果清单是工作区的根目录,则选择工作区的默认成员,否则只选择清单定义的包。
可以使用根清单中的 workspace.default-members
键显式设置工作区的默认成员。如果未设置,则虚拟工作区将包含所有工作区成员(相当于传递 --workspace
),而非虚拟工作区将仅包含根 crate 本身。
-p
规范…--package
规范…- 仅显示指定的包。有关规范格式,请参阅 cargo-pkgid(1)。此标志可以指定多次,并支持常见的 Unix 通配符模式,如
*
、?
和[]
。但是,为了避免您的 shell 在 Cargo 处理之前意外扩展通配符模式,您必须在每个模式周围使用单引号或双引号。 --workspace
- 显示工作区中的所有成员。
--exclude
规范…- 排除指定的包。必须与
--workspace
标志一起使用。此标志可以指定多次,并支持常见的 Unix 通配符模式,如*
、?
和[]
。但是,为了避免您的 shell 在 Cargo 处理之前意外扩展通配符模式,您必须在每个模式周围使用单引号或双引号。
清单选项
--manifest-path
路径Cargo.toml
文件的路径。默认情况下,Cargo 在当前目录或任何父目录中搜索Cargo.toml
文件。--locked
- 断言使用的依赖项和版本与最初生成现有
Cargo.lock
文件时完全相同。在出现以下任一情况时,Cargo 将退出并报错- 缺少锁定文件。
- 由于不同的依赖项解析,Cargo 尝试更改锁定文件。
它可以在需要确定性构建的环境中使用,例如在 CI 管道中。
--offline
- 阻止 Cargo 出于任何原因访问网络。如果没有此标志,Cargo 在需要访问网络而网络不可用时将停止并报错。使用此标志,Cargo 将尝试在可能的情况下在没有网络的情况下继续进行。
请注意,这可能会导致与在线模式不同的依赖项解析。Cargo 将限制自己使用本地下载的 crate,即使本地索引副本中指示可能有更新的版本。请参阅 cargo-fetch(1) 命令以下载依赖项,然后再脱机。
也可以使用
net.offline
配置值 指定。 --frozen
- 等效于同时指定
--locked
和--offline
。
功能选择
功能标志允许您控制启用哪些功能。当未给出功能选项时,将为每个选定的包激活 default
功能。
有关更多详细信息,请参阅 功能文档。
-F
功能--features
功能- 要激活的功能的空格或逗号分隔列表。可以使用
package-name/feature-name
语法启用工作区成员的功能。此标志可以指定多次,这将启用所有指定的功能。 --all-features
- 激活所有选定包的所有可用功能。
--no-default-features
- 不要激活选定包的
default
功能。
显示选项
-v
--verbose
- 使用详细输出。可以指定两次以获得“非常详细”的输出,其中包括额外的输出,例如依赖项警告和构建脚本输出。也可以使用
term.verbose
配置值 指定。 -q
--quiet
- 不要打印 cargo 日志消息。也可以使用
term.quiet
配置值 指定。 --color
何时- 控制何时使用彩色输出。有效值
auto
(默认值):自动检测终端上是否支持彩色。always
:始终显示颜色。never
:从不显示颜色。
也可以使用
term.color
配置值 指定。
常用选项
+
工具链- 如果使用 rustup 安装了 Cargo,并且
cargo
的第一个参数以+
开头,则它将被解释为 rustup 工具链名称(例如+stable
或+nightly
)。有关工具链覆盖如何工作的更多信息,请参阅 rustup 文档。 --config
键=值 或 路径- 覆盖 Cargo 配置值。参数应采用
键=值
的 TOML 语法,或作为额外配置文件的路径提供。此标志可以指定多次。有关更多信息,请参阅 命令行覆盖部分。 -C
路径- 在执行任何指定的操作之前更改当前工作目录。这会影响 cargo 默认查找项目清单 (
Cargo.toml
) 的位置,以及搜索.cargo/config.toml
的目录等。此选项必须出现在命令名称之前,例如cargo -C path/to/my-project build
。此选项仅在 nightly 频道 上可用,并且需要
-Z unstable-options
标志才能启用(请参阅 #10098)。 -h
--help
- 打印帮助信息。
-Z
标志- Cargo 的不稳定(仅限 nightly)标志。运行
cargo -Z help
获取详细信息。
环境
有关 Cargo 读取的环境变量的详细信息,请参阅 参考。
退出状态
0
:Cargo 成功。101
:Cargo 未能完成。
示例
-
显示当前目录中包的树
cargo tree
-
显示所有依赖于
syn
包的包cargo tree -i syn
-
显示每个包上启用的功能
cargo tree --format "{p} {f}"
-
显示所有多次构建的包。如果树中出现多个语义版本不兼容的版本(如 1.0.0 和 2.0.0),则可能会发生这种情况。
cargo tree -d
-
解释为什么为
syn
包启用了这些功能cargo tree -e features -i syn
-e features
标志用于显示功能。-i
标志用于反转图形,以便显示依赖于syn
的包。以下是一个示例:syn v1.0.17 ├── syn feature "clone-impls" │ └── syn feature "default" │ └── rustversion v1.0.2 │ └── rustversion feature "default" │ └── myproject v0.1.0 (/myproject) │ └── myproject feature "default" (command-line) ├── syn feature "default" (*) ├── syn feature "derive" │ └── syn feature "default" (*) ├── syn feature "full" │ └── rustversion v1.0.2 (*) ├── syn feature "parsing" │ └── syn feature "default" (*) ├── syn feature "printing" │ └── syn feature "default" (*) ├── syn feature "proc-macro" │ └── syn feature "default" (*) └── syn feature "quote" ├── syn feature "printing" (*) └── syn feature "proc-macro" (*)
要阅读此图,您可以从根节点开始跟踪每个功能的链,以了解其包含原因。例如,“full”功能是由
rustversion
crate 添加的,该 crate 由myproject
(使用默认功能)包含,而myproject
是在命令行上选择的包。所有其他syn
功能都由“default”功能添加(“quote”由“printing”和“proc-macro”添加,两者都是默认功能)。如果您在交叉引用去重后的
(*)
条目时遇到困难,请尝试使用--no-dedupe
标志以获取完整输出。