cargo-metadata(1)
名称
cargo-metadata - 输出当前包的机器可读的元数据
概要
cargo metadata
[options]
描述
在 stdout 中输出工作空间成员的信息和当前包已解析的依赖。
建议在使用时添加 --format-version
标志以保证未来也会以你预期的格式进行输出。
另见 cargo_metadata crate 查看读取该元数据的 Rust API。
输出格式
输出格式如下:
{
/* 工作空间中的所有包
其中也包括了所有被 feature 所启用的依赖,除非设置了 --no-deps 标志。
*/
"packages": [
{
/* 包的名称 */
"name": "my-package",
/* 包的版本 */
"version": "0.1.0",
/* Package ID,引用一个包的唯一标识符。 */
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
/* 来自清单文件中的 license 值,或为 null */
"license": "MIT/Apache-2.0",
/* 来自清单文件中的 license-file 值,或为 null */
"license_file": "LICENSE",
/* 来自清单文件中的 description 值 ,或为 null */
"description": "Package description.",
/* 包的 source ID ,其表示一个包是从何处获取的。
对于 path 类型的依赖或者工作空间成员,该值为 null。
对于其他依赖,该值为一个字符串,其格式为:
- 对于 registry-based 的依赖,为 "registry+URL"。
例如: "registry+https://github.com/rust-lang/crates.io-index"
- 对于 git-based 的依赖,为 "git+URL"。
例如: "git+https://github.com/rust-lang/cargo?rev=5e85ba14aaa20f8133863373404cb0af69eeef2c#5e85ba14aaa20f8133863373404cb0af69eeef2c"
*/
"source": null,
/* 该包的清单文件中声明的所有依赖 */
"dependencies": [
{
/* 依赖的名称 */
"name": "bitflags",
/* 依赖的 source ID,可能为 null,见 package source 的描述。
*/
"source": "registry+https://github.com/rust-lang/crates.io-index",
/* The version requirement for the dependency.
Dependencies without a version requirement have a value of "*".
*/
/* 对于该依赖的版本请求。没有版本请求的依赖以"*"为值 */
"req": "^1.0",
/* 依赖的种类。
有 "dev", "build",对于普通依赖来说为 null。
*/
"kind": null,
/* 如果依赖被重命名,该值为新名,没有重命名则为 null。
*/
"rename": null,
/* 布尔值,表示该依赖是否是可选的。 */
"optional": false,
/* 布尔值,表示该依赖是否启用了 default feature。 */
"uses_default_features": true,
/* 所有启用的 feature。 */
"features": [],
/* 该依赖的目标平台,如果不是一个平台特定依赖,则值为 null。
*/
"target": "cfg(windows)",
/* 本地依赖(path dependency)在文件系统中的路径,如果不是本地依赖,该字段不会出现。
*/
"path": "/path/to/dep",
/* 依赖来自的 registry 的 URL 字符串。如果没有指定或者值为 null,则该依赖来自默认的 registry (crates.io)
*/
"registry": null
}
],
/* Cargo targets. */
"targets": [
{
/* target 的种类。
- lib targets 会陈列清单文件中的 `crate-type` 值
比如 "lib", "rlib", "dylib", "proc-macro"。 (默认值为 ["lib"])
- 二进制目标为 ["bin"]
- example 为 ["example"]
- 集成测试为 ["test"]
- benchmark 为 ["bench"]
- build script 为 ["custom-build"]
*/
"kind": [
"bin"
],
/* crate 的种类。
- lib 和 example库 会陈列清单文件中的 `crate-type` 值
比如 "lib", "rlib", "dylib", "proc-macro"。 (默认值为 ["lib"])
- 其他 target 类都为 ["bin"]
*/
"crate_types": [
"bin"
],
/* target 的名称 */
"name": "my-package",
/* 目标的*根*源文件的绝对路径。 */
"src_path": "/path/to/my-package/src/main.rs",
/* target 的 Rust 版本。
默认为 package 标注的 Rust 版本。
*/
"edition": "2018",
/* 启用的 feature。
如果没有设置 feature,则该字段不存在。
*/
"required-features": ["feat1"],
/* 该目标是否应该使用 `cargo doc` 生成文档。 */
"doc": true,
/* 该目标是否启用文档测试,且该目标是否与文档测试兼容。
*/
"doctest": false,
/* 该目标在运行或构建时是否设置 `--test`。
*/
"test": true
}
],
/* 包中定义的 feature,每一项 feature 启用一系列 feature 或者依赖项。
*/
"features": {
"default": [
"feat1"
],
"feat1": [],
"feat2": []
},
/* 该包的清单文件的绝对路径 */
"manifest_path": "/path/to/my-package/Cargo.toml",
/* 包的元数据。
若没有指定元数据,该项为 null。
*/
"metadata": {
"docs": {
"rs": {
"all-features": true
}
}
},
/* 该包可能发布的 registry 列表。List of registries to which this package may be published.
若为 null 则发布不受限制,若为空数组,则禁止发布。 */
"publish": [
"crates-io"
],
/* 清单文件中的 authors。
如果没有指定 authors,则该值为空数组。
*/
"authors": [
"Jane Doe <user@example.com>"
],
/* 清单文件中的 categories。 */
"categories": [
"command-line-utilities"
],
/* 可选字符串。指定 cargo run 执行的默认二进制crate。 */
"default_run": null,
/* 可选字符串。声明支持的最小 rust 版本。 */
"rust_version": "1.56",
/* 清单文件中的 keywords。 */
"keywords": [
"cli"
],
/* 清单文件中的 readme 值,若没有指定则为 null。 */
"readme": "README.md",
/* 清单文件中的 repository 值,若没有指定则为 null。 */
"repository": "https://github.com/rust-lang/cargo",
/* 清单文件中的 homepage 值,若没有指定则为 null。 */
"homepage": "https://rust-lang.org",
/* 清单文件中的 documentation 值,若没有指定则为 null。 */
"documentation": "https://doc.rust-lang.org/stable/std",
/* 该包的默认 rust 版本。
注意,每个 target 可能有不同的 rust 版本。
*/
"edition": "2018",
/* 可选字符串。指示该包链接的本地库的名称。
*/
"links": null,
}
],
/* 工作空间的成员。
每个条目都是一个 Package ID 。
*/
"workspace_members": [
"my-package 0.1.0 (path+file:///path/to/my-package)",
],
// 整个工作空间的依赖解析图。启用的 feature 是基于 “当前” 的包所启用的 feature。
// 未启用的可选依赖没有列入其中。
//
// 如果使用了 --no-deps 标志,则该项为 null。
//
// 默认情况下,该项会包含面向所有目标平台的所有依赖
// `--filter-platform` 标志可以用来收窄到特定的目标三元组 (target triple)。
"resolve": {
/* 依赖图中节点组成的数组。
每个节点(node)都是一个包(package)。
*/
"nodes": [
{
/* 节点的 Package ID */
"id": "my-package 0.1.0 (path+file:///path/to/my-package)",
/* 该包的依赖项,一个 Package ID 的数组。 */
"dependencies": [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
],
/* 该包的依赖项。这是 "dependencies" 的另一种表示,其中包含额外的信息。比如依赖的重命名。
*/
"deps": [
{
/* 依赖的库target的名称。The name of the dependency's library target.
如果该依赖被重命名,则该name是新名。
*/
"name": "bitflags",
/* 依赖的 Package ID */
"pkg": "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
/* 依赖种类的数组,在 Cargo 1.40 中加入该项。 */
"dep_kinds": [
{
/* 依赖种类。
"dev", "build", 普通依赖为 null。
*/
"kind": null,
/* 依赖的目标平台,非平台特定依赖为 null。
*/
"target": "cfg(windows)"
}
]
}
],
/* 该包中启用的 feature 。 */
"features": [
"default"
]
}
],
/* 工作空间的 root package 。
如果是 virtual workspace 此项为 null,其他情况为 root package 的 Package ID 。
*/
"root": "my-package 0.1.0 (path+file:///path/to/my-package)"
},
/* 构建文件夹的绝对路径,Cargo 在此处存放构建输出产物。 */
"target_directory": "/path/to/my-package/target",
/* 此元数据的 schema 版本
如果未来有不兼容的变化,该值会改变。
*/
"version": 1,
/* 工作空间根文件夹的绝对路径 */
"workspace_root": "/path/to/my-package"
/* 工作空间的元数据Workspace metadata.
如果没有指定元数据,则该项为 null。 */
"metadata": {
"docs": {
"rs": {
"all-features": true
}
}
}
}
选项
输出选项
--no-deps
- 仅输出工作空间成员的信息而不下载依赖
--format-version
version- 指定输出格式的版本。目前
1
是唯一的合法值。 --filter-platform
triple- 这会过滤
解析信息
的输出,仅包括对于特定目标 (target triple) 的结果。 如果不加这个标志,解析会包括所有的目标 (targets)。注意, "packages" 数组仍然会包含所有的依赖。每个 package 的信息是
Cargo.toml
中信息的不做修改的再现。
选择 feature
特性标志允许你控制开启哪些特性。当没有提供特性选项时,会为每个选择的包启用 default
特性。
查看 features 文档 获取更多信息。
-F
features--features
features- 用空格或逗号来分隔多个启用的 feature。 工作空间成员的 feature 可以通过
package-name/feature-name
语法来启用。 该标志可以设置多次,最终将启用指定的所有 feature 。 --all-features
- 启用指定包的所有可用 feature。
--no-default-features
- 不使用指定包的
default
feature 。
显示选项
-v
--verbose
- 进行 verbose 输出。可以指定两遍来开启 "very verbose" 模式,输出更多的额外信息,像是依赖项的警告和构建脚本的输出信息。
也可以通过
term.verbose
配置选项 来指定。 -q
--quiet
- 不打印 cargo log 信息。
也可以通过
term.quiet
配置选项来指定。 --color
when- 控制*何时*使用彩色输出。可选值有:
auto
(默认值): 自动检测终端是否支持彩色输出。always
: 总是显示彩色。never
: 从不显示彩色。
也可以在
term.color
配置选项中设置。
清单选项
--manifest-path
pathCargo.toml
文件的路径。默认情况下,Cargo 会从当前目录或任意的上级目录搜索Cargo.toml
。--frozen
--locked
- 这两个 flag 都需要
Cargo.lock
文件处于无需更新的状态。如果 lock 文件缺失,或者需要被更新,Cargo 会报错退出。--frozen
flag 还会阻止 Cargo 访问网络来判断 Cargo.lock 是否过期。这些 flag 可以用于某些场景下你想断言
Cargo.lock
无需更新 (比如在CI中构建) 或者避免网络访问。 --offline
- 阻止 Cargo 访问网络。如果没有这个 flag,当 Cargo 需要访问网络但是没有网络时,就会报错退出。加上这个 flag,Cargo 会尝试在不联网的情况下继续执行 (如果可以的话) 。
要小心这会导致与在线模式不同的解析结果。Cargo 会限制自己在本地已下载的 crate 中查找版本,即使在本地的 index 拷贝中表明还有更新的版本。 cargo-fetch(1) 命令可以在进入离线模式前下载依赖。
同样的功能也可以通过设置
net.offline
配置选项来实现。
通用选项
+
toolchain- 如果 Cargo 由 rustup 安装,那么
cargo
后第一个以+
开头的参数会被认为是 rustup toolchain 名字(例如+stable
或+nightly
)。 查看 rustup documentation 了解 toolchain overrides 如何工作。 --config
KEY=VALUE or PATH- 覆盖一个 Cargo 配置的值。参数应该是一个 TOML 语法的
KEY=VALUE
,或者提供一个路径来指向一个额外的配置文件 (configuration file)。 这个标记可以指定多次。 参考 command-line overrides 一节 获取更多信息。 -h
--help
- 打印帮助信息。
-Z
flag- 不稳定 (nightly-only) 的标志。 执行
cargo -Z help
获取详细信息。
环境
查看 the reference 获取 Cargo 读取的环境变量的更多信息。
退出状态
0
: Cargo 执行成功。101
: Cargo 没有执行完成。
使用案例
-
以 JSON 格式输出当前包的信息:
cargo metadata --format-version=1