Rust:cargo指令

505 阅读7分钟
  • cargo 是 Rust 的包管理器,用于管理依赖、构建、测试和发布项目。

  • 命令可分为本地包管理、构建与编译、测试与基准测试、运行与执行、依赖管理、信息与配置、注册表管理和其他类别。

  • 一些命令如 addremove 是较新的功能,从 Rust 1.62.0 开始可用。

  • 某些命令如 read-manifestverify-project 已废弃,git-checkout 已移除。

cargo 提供了丰富的命令来帮助开发者管理 Rust 项目。以下是每个命令的详细解释,按功能类别组织,适合初学者理解。

本地包管理

这些命令用于创建和管理本地包:

  • add: 添加依赖到 cargo.toml 配置文件,从 Rust 1.62.0 开始可用。
  • remove (rm): 从 cargo.toml 移除依赖,从 Rust 1.62.0 开始可用。
  • init: 在现有目录创建新包。
  • new: 在指定路径创建新包。
  • package: 将本地包组装成可分发的 tarball 文件。

构建与编译

这些命令用于编译和生成项目:

  • build (b): 编译本地包及其所有依赖。
  • check (c): 检查本地包及其依赖是否有错误,但不生成可执行文件。
  • clean: 移除 cargo 之前生成的工件,如 target 目录。
  • clippy: 使用 clippy 工具检查代码,捕获常见错误并改进代码质量。
  • doc (d): 构建包的文档。
  • fetch: 从网络获取包的依赖。
  • fix: 自动修复 rustc 报告的 lint 警告。
  • fmt: 使用 rustfmt 格式化当前 crate 的所有二进制和库文件。
  • generate-lockfile: 为包生成 lockfile。
  • rustc: 编译包,并传递额外选项给编译器。
  • rustdoc: 使用自定义标志构建包的文档。

测试与基准测试

这些命令用于测试和性能评估:

  • bench: 执行本地包的所有基准测试。
  • test (t): 执行所有单元测试和集成测试,并构建示例。
  • miri: 运行 Miri 解释器,用于测试和调试,检查 Rust 代码的未定义行为。

运行与执行

  • run (r): 运行本地包的二进制文件或示例。

依赖管理

  • update: 更新本地 lock 文件中记录的依赖。
  • vendor: 将所有依赖本地化,适合离线构建或需要管理依赖版本的项目。

信息与配置

  • config: 检查配置值。
  • help: 显示 cargo 子命令的帮助信息。
  • locate-project: 打印 cargo.toml 文件位置的 JSON 表示。
  • metadata: 以机器可读格式输出包的解析依赖,包括具体版本和覆盖。
  • pkgid: 打印完全限定的包规范。
  • version: 显示 cargo 的版本信息。

注册表管理

  • install: 从 crates.io 或其他注册表安装 Rust 二进制文件。
  • login: 登录到注册表。
  • logout: 从本地移除注册表的 API 令牌。
  • owner: 管理注册表上 crate 的所有者。
  • publish: 将包上传到注册表。
  • search: 在注册表中搜索包,默认是 crates.io。
  • uninstall: 移除 Rust 二进制文件。
  • yank: 从索引中移除已推送的 crate。

其他

  • tree: 显示依赖图的树状可视化。
  • report: 生成并显示各种报告。
  • read-manifest: 已废弃,打印 cargo.toml 清单的 JSON 表示。
  • verify-project: 已废弃,检查 crate 清单的正确性。

已移除的命令

  • git-checkout: 此命令已移除,不再可用。

详细调查报告

引言

cargo 是 Rust 编程语言的包管理器,负责处理依赖、构建、测试和发布项目。它提供了丰富的命令集,涵盖从本地包管理到注册表交互的各种功能。本报告详细解释了用户提供的每个 cargo 命令及其用途,按功能类别组织,旨在为开发者提供全面的参考。

方法

通过分析官方文档和相关资源,确认每个命令的功能,并根据其用途分类。特别注意较新的命令(如 addremove)和已废弃的命令(如 read-manifestverify-project)。报告还包括对某些命令(如 miri)的额外解释,以确保完整性。

分类与详细解释

本地包管理

本地包管理命令用于创建和修改本地 Rust 项目:

  • add: 从 Rust 1.62.0 开始可用,用于向 cargo.toml 添加依赖,简化手动编辑。例如,cargo add serde 会添加 serde crate。(cargo add - The Cargo Book)
  • remove (rm): 同样从 Rust 1.62.0 开始可用,用于从 cargo.toml 移除依赖,如 cargo remove serde
  • init: 在现有目录创建新包,初始化 cargo.toml 和项目结构。
  • new: 在指定路径创建新包,适合新项目启动。
  • package: 将本地包组装成 tarball 文件,准备发布。
构建与编译

这些命令用于编译和生成项目文件:

  • build (b): 编译本地包及其依赖,生成可执行文件或库。b 是其别名。
  • check (c): 检查代码是否有错误,但不生成可执行文件,适合快速验证。c 是其别名。
  • clean: 移除之前生成的工件,如 target 目录,清理项目。
  • clippy: 使用 clippy 工具检查代码,捕获常见错误并建议改进。
  • doc (d): 构建包的文档,生成 HTML 文件。d 是其别名。
  • fetch: 从网络获取依赖,确保本地缓存最新。
  • fix: 自动修复 rustc 报告的 lint 警告,改进代码质量。
  • fmt: 使用 rustfmt 格式化代码,确保一致的代码风格。
  • generate-lockfile: 为包生成 Cargo.lock 文件,锁定依赖版本。
  • rustc: 直接调用 rustc 编译器,允许传递额外选项。
  • rustdoc: 使用自定义标志构建文档,适合高级文档生成。
测试与基准测试

这些命令用于验证代码功能和性能:

  • bench: 执行所有基准测试,评估性能。
  • test (t): 执行单元测试和集成测试,并构建示例。t 是其别名。
  • miri: 运行 Miri 解释器,用于检测未定义行为,特别适合安全关键代码。(Miri documentation)
运行与执行
  • run (r): 运行本地包的二进制文件或示例,方便调试。r 是其别名。
依赖管理
  • update: 更新 Cargo.lock 文件中记录的依赖,确保使用最新版本。
  • vendor: 将所有依赖本地化,生成 vendor 目录,适合离线环境。
信息与配置
  • config: 检查 cargo 的配置值,了解当前设置。
  • help: 显示子命令的帮助信息,适合初学者。
  • info: 显示包的信息,包括元数据。
  • locate-project: 打印 cargo.toml 位置的 JSON 表示,适合脚本使用。
  • metadata: 以机器可读格式输出依赖信息,适合自动化工具。
  • pkgid: 打印完全限定的包规范,显示包的唯一标识。
  • version: 显示 cargo 的版本信息,确认当前使用版本。
注册表管理

这些命令用于与 crates.io 或其他注册表交互:

  • install: 从注册表安装 Rust 二进制文件,如工具或命令行程序。
  • login: 登录到注册表,获取 API 令牌。
  • logout: 从本地移除注册表的 API 令牌,安全退出。
  • owner: 管理注册表上 crate 的所有者,适合团队协作。
  • publish: 将包上传到注册表,如 crates.io。
  • search: 在注册表中搜索包,默认使用 crates.io。
  • uninstall: 移除之前安装的 Rust 二进制文件。
  • yank: 从索引中移除已推送的 crate,适合紧急修复。
其他
  • tree: 显示依赖图的树状可视化,方便分析依赖关系。
  • report: 生成并显示各种报告,适合项目分析。
  • read-manifest: 已废弃,打印 cargo.toml 的 JSON 表示,不推荐使用。
  • verify-project: 已废弃,检查 crate 清单的正确性,不再维护。
已移除的命令
  • git-checkout: 已移除,不再可用,可能是早期版本的功能。

讨论

值得注意的是,addremove 是较新的命令,从 Rust 1.62.0 开始引入,之前需要手动编辑 cargo.toml 或使用第三方工具如 cargo-edit。miri 的使用适合高级开发者,特别是在安全关键场景下。已废弃的命令如 read-manifestverify-project 应避免使用,以确保兼容性。

表格:命令类别与示例

以下表格总结了主要命令类别及其示例:

类别命令示例备注
本地包管理add, removecargo add serde从 Rust 1.62.0 开始可用
构建与编译build, checkcargo buildbuild 是常用命令
测试与基准测试test, benchcargo testtest 包括单元和集成测试
运行与执行runcargo run运行二进制或示例
依赖管理update, vendorcargo updatevendor 适合离线环境
信息与配置help, versioncargo --helpversion 显示 cargo 版本
注册表管理publish, searchcargo search serdesearch 默认使用 crates.io
其他tree, reportcargo treetree 显示依赖树