Rust:cargo指令

  • 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, remove cargo add serde 从 Rust 1.62.0 开始可用
构建与编译 build, check cargo build build 是常用命令
测试与基准测试 test, bench cargo test test 包括单元和集成测试
运行与执行 run cargo run 运行二进制或示例
依赖管理 update, vendor cargo update vendor 适合离线环境
信息与配置 help, version cargo --help version 显示 cargo 版本
注册表管理 publish, search cargo search serde search 默认使用 crates.io
其他 tree, report cargo tree tree 显示依赖树
相关推荐
无名之逆8 分钟前
轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane
服务器·开发语言·前端·后端·http·rust
无名之逆32 分钟前
探索Hyperlane:用Rust打造轻量级、高性能的Web后端框架
服务器·开发语言·前端·后端·算法·rust
Source.Liu32 分钟前
【CXX】6.9 CxxVector<T> — std::vector<T>
c++·rust·cxx
穆骊瑶33 分钟前
Java语言的WebSocket
开发语言·后端·golang
追逐时光者1 小时前
精选 5 款基于 .NET 开源、功能强大的编辑器
后端·.net
uhakadotcom1 小时前
阿里云 MaxCompute SQLML:轻松实现机器学习
后端·面试·github
Asthenia04122 小时前
[4-Consumer]消费者端实现心跳功能
后端
Asthenia04122 小时前
[3-Consumer]回答面试官关于 MQ 项目中 Topic+Tag 二级消息过滤的思路整理
后端
Asthenia04122 小时前
[2-Consumer]如何回答面试官关于 MQ 轮子项目中 Push 和 Pull 混合消费的实现思路
后端
Asthenia04122 小时前
在面试中我被问到RocketMQ的延时队列是如何实现的。谈谈回答的思路
后端