
Reference 速查清单Cargo 从项目创建、测试到发布的完整实战指南【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/referenceCargo 是 Rust 生态的官方构建工具与包管理器也是日常 Rust 开发使用频率最高的命令行工具。本文基于 Reference 速查清单仓库中的 Cargo 备忘清单 整理扩充覆盖 Rust 工具链安装、核心命令速查、国内镜像源切换、项目创建与编译、Cargo.toml目标配置、测试过滤直至打包、发布与 yank 撤回的完整生命周期。读完本篇你可以独立完成一个 Rust 项目的创建、构建、测试与发布并能熟练查阅仓库配套清单深入相关主题。安装与版本确认在 Linux 与 macOS 上推荐通过官方工具链管理脚本 rustup 一次性安装 Rust 编译器与 CargoCargo 清单$ curl -sSf https://static.rust-lang.org/rustup.sh | sh安装完成后用版本命令确认工具链已就绪$ cargo version相关资源可参考Cargo 开源仓库与官方手册Cargo Book、Rust 社区的 crate 仓库 crates.io以及 Cargo 手册中文版rustwiki。Rust 语言本身的语法速查可继续查阅本仓库的 Rust 备忘清单。核心命令速查速查清单 汇总了日常使用频率最高的 9 条命令适合作为开发时的第一反应表| 命令 | 作用 | | :- | :- | |cargo version| 显示版本信息以确认 Cargo 已安装 | |cargo new| 创建一个新项目 | |cargo test| 在项目中运行单元测试 | |cargo check| 快速编译项目无需生成二进制文件来检查错误 | |cargo fmt| 自动格式化代码 | |cargo build| 编译一个项目 | |cargo run| 一步编译和运行项目 | |cargo clippy --all-targets -- --D warnings| Linter 检查错误 | |cargo tarpaulin --ignore-tests| 检查代码覆盖率 |从命令结构看cargo check只执行类型检查与依赖解析而不产出可执行文件因此是大型项目中迭代排错时最快的反馈循环cargo fmt与cargo clippy属于 Rust 工具链的可扩展组件通常需要通过 rustup 安装对应组件后方可使用cargo tarpaulin则是第三方覆盖率工具需另行安装。切换国内镜像源crates.io 的官方索引在国内访问缓慢速查清单 给出了通过本地配置文件切换镜像源的完整步骤。创建并编辑配置文件$ touch ~/.cargo/config # 添加配置文件 $ vim ~/.cargo/config # 编辑配置文件配置文件内容将默认源crates-io通过replace-with指向清华 TUNA 镜像[source.crates-io] registry https://github.com/rust-lang/crates.io-index replace-with tuna # 如果需要提交包注释配置源 [source.tuna] registry https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git # registry git://mirrors.ustc.edu.cn/crates.io-index其中replace-with字段声明了“使用crates-io时实际改走tuna源”的替换关系注释掉replace-with即可在需要向 crates.io 提交publish时恢复官方源这也是速查清单 注释的提示。文件末尾同时保留了中科大镜像的备选地址可按网络环境切换。清理缓存关键步骤切换源之后必须删除旧的包缓存否则仍可能命中旧索引数据速查清单$ rm -rf ~/.cargo/.package-cache # ⚠️ 删除缓存目录内容注意该命令删除的是缓存目录内容请在确认路径后再执行。较新版本的 Cargo 亦支持.cargo/config.toml作为等效配置文件名两者行为一致。创建新项目生成项目骨架使用cargo new创建二进制程序速查清单$ cargo new hello_world --bin目标类型参数--bin正在制作一个二进制程序默认行为--lib正在创建一个库lib得到的标准目录结构$ cd hello_world $ tree . . ├── Cargo.toml └── src └── main.rs理解 Cargo.toml 清单Cargo.toml被称为一个manifest元清单它包含了 Cargo 编译项目所需的所有元数据[package] name hello_world version 0.1.0 authors [Your Name youexample.com] edition 2018 [dependencies]入口文件src/main.rsfn main() { println!(Hello, world!); }edition字段决定语言版本常见取值为2015、2018、2021cargo init --edition的默认值为2021。Cargo.toml是 TOML 格式文件其完整语法可查阅本仓库的 TOML 备忘清单。编译并运行$ cargo build # 文件放入 target/release 目录 $ cargo build --release然后直接执行生成的二进制$ ./target/debug/hello_world Hello, world!也可以直接使用cargo run它会自行编译并运行项目$ cargo run Running target/hello_world Hello, world!约定上debug 产物落在target/debug/--release优化产物落在target/release/target/目录通常加入版本控制的忽略清单。源Source配置详解速查清单 给出了更完整的[source]配置示例展示了本地目录源、Git 源与源替换的组合方式# source 表下就是存储有关要更换的来源名称 [source] # 在source 表格之下的可为一定数量的有关来源名称。示例下面就定义了一个新源 叫 my-awesome-source其内容来自本地 vendor 目录其相对于包含 .cargo/config 文件的目录 [source.my-awesome-source] directory vendor # Git sources 也指定一个 branch/tag/rev git https://example.com/path/to/repo # branch master # tag v1.0.1 # rev 313f44e8 # crates.io 默认源 在crates-io名称下且在这里我们使用 replace-with 字段指明 默认源更换成my-awesome-source源 [source.crates-io] replace-with my-awesome-source源定义支持几种类型速查清单 列出了全套可用字段# 每个源都有自己的表格名称即是表名 [source.the-source-name] # 命令 the-source-name 会被 another-source 取代 replace-with another-source # 有几种可用的源定义(接下来有所描述) registry https://example.com/path/to/index local-registry path/to/registry directory path/to/vendor更换源的配置通过完成.cargo/config文件实现。directory源适合企业内网离线构建将依赖 vendored 到本地目录Git 源可通过branch/tag/rev精确锁定版本registry源则指向任意兼容 crates.io 索引协议的仓库。配置目标[lib] 表当一个 crate 包含库目标时可在Cargo.toml中用[lib]表精细控制其构建行为速查清单[package] # ... [lib] # 生成目标与库的名称。本该默认是包名, 替换所有破折号为 下划线。(Rust extern crate 声明会参考该名因此该值必须是可用的有效Rust标识符) name foo # 该字段指向 crate 的入口(位置), 路径相对于 Cargo.toml. path src/lib.rs # 一个给目标启用单元测试 的 标志. 会被 cargo test使用. test true # 一个给目标启用文档测试 的 标志. 只与库相关, 不会影响其他部分。会被 cargo test使用. doctest true # 一个给目标启用基准 的 标志. 会被 cargo bench使用. bench true # 一个给目标启用文档 的 标志. 会被 cargo doc使用. doc true # 若该目标为 编译器扩展, 那要把该字段设为 true以让 Cargo 正确编译和可用于所有依赖项. plugin false # 若该目标为 macros 1.1 程序宏, 那要把该字段设为 true proc-macro false # 若设为 false, cargo test 会为 rustc 省略 --test 标志, 这阻止它生成测试工具。这在二进制存在构建管理测试运行器本身的情况下有用. harness true # 若设置了那 目标会使用一个与[package]配置不同的版本, 也许是编译一个库 2018年版本或编译单元测试的2015年版本. 默认情况下所有目标都使用[package]中指定的版本进行编译。 edition 2015几个关键影响点值得强调test与doctest决定cargo test是否生成对应的单元测试与文档测试二进制proc-macro true是编写程序宏 crate 的必备声明harness false则用于自管测试运行器的场景此时 Cargo 不再为 rustc 附加--test标志。项目目录约定一个功能完整的 Cargo 项目目录布局如下速查清单. ├── Cargo.lock ├── Cargo.toml ├── benches # 基准目录 │ └── large-input.rs ├── examples # 示例 │ └── simple.rs ├── src # 源代码 │ ├── bin │ │ └── another_executable.rs │ ├── lib.rs # 默认库 │ └── main.rs # 入口文件 └── tests # 集成测试 └── some-integration-tests.rs从目录结构可以读出 Cargo 的约定src/main.rs是二进制入口src/lib.rs是库入口src/bin/下的每个文件是额外可执行目标tests/存放集成测试会作为独立 crate 链接本库benches/与examples/分别对应cargo bench与示例运行。Cargo.lock记录解析后的精确依赖版本通常约定随仓库提交以保证可复现构建。编译与测试编译输出# 编译输出二进制文件放入 target/debug 目录 $ cargo build # 输出二进制文件放入 target/release 目录 $ cargo build --release $ cargo run # 编译并运行测试过滤cargo test默认运行全部测试并支持通过过滤器精确选择速查清单$ cargo test # 运行你的所有测试 # 指定函数过滤器 $ cargo test test_foo # 开头是 test_foo 的函数都会运行例如(test_foo_bar) # 指定特定模块中的测试函数(通常可以简写 cargo test foo::bar::tests::test_foo) $ cargo test --package rustt --lib -- foo::bar::tests::test_foo --exact --nocapture # 指定特定测试的模块(通常可以简写 cargo test foo::bar::tests) $ cargo test --package rustt --lib -- foo::bar::tests --nocapture参数要点--package name指定工作区中的包--lib限定为库目标--之后的参数透传给底层测试运行器--exact要求过滤器精确匹配而非前缀匹配--nocapture让测试中的println!输出直接显示到终端便于调试。包管理命令cargo init / cargo new在已有目录或新目录中初始化包速查清单$ cargo init [options] [path] $ cargo new [options] [path]常用选项--bin创建具有二进制目标src/main.rs的包默认行为--lib使用库目标src/lib.rs创建一个包--edition edition指定要使用的 Rust 版本默认值为2021可能的值2015、2018、2021--name name设置包名默认为目录名称--vcs vcs为给定的版本控制系统git、hg、pijul 或 fossil初始化一个新的 VCS 存储库或者根本不初始化任何版本控制none--registry registry限制仅发布到该注册表典型用法$ cargo new foo安装包# 从 crates.io 安装或升级软件包 $ cargo install ripgrep # 在当前目录安装或重新安装包 $ cargo install --path . # 查看已安装包的列表 $ cargo install --list速查清单可选参数--vers version/--version version指定要安装的版本--git url用于安装指定 crate 的 Git URL--branch branch从 git 安装时要使用的分支--tag tag从 git 安装时使用的标记--rev sha从 git 安装时使用的特定提交--path path要安装的本地 crate 的文件系统路径--list列出所有已安装的软件包及其版本-f,--force强制覆盖现有的 crate 或二进制文件cargo install安装的是可执行产物安装到~/.cargo/bin与cargo add这类“添加项目依赖”的操作不同后者写入的是Cargo.toml的[dependencies]。搜索包$ cargo search [options] [query...]--limit limit限制结果数量默认值10最大值100--index index要使用的注册表索引的 URL--registry registry要使用的注册表的名称$ cargo search serde卸载包$ cargo uninstall [options] [spec...]-p,--package spec...要卸载的软件包--bin name...仅卸载二进制名称--root dir从中卸载软件包的目录$ cargo uninstall ripgrep发布命令登录与通用输出选项$ cargo login [options] [token]--registry要使用的注册表的名称通用输出选项速查清单| 选项 | 说明 | | :- | :- | |-v,--verbose| 启用更加详细的输出 | |-q,--quiet| 不输出 Cargo 的日志信息 | |--color when| 输出内容的颜色auto、always、never|所有者管理# 列出包的所有者 $ cargo owner --list foo # 邀请所有者加入包 $ cargo owner --add username foo # 从包中删除所有者 $ cargo owner --remove username foo速查清单| 选项 | 说明 | | :- | :- | |--token token| 身份验证时使用的 API 令牌 | |--index index| 要使用的注册表索引的 URL |打包与发布公共选项以下选项组在cargo package、cargo publish等命令间共享速查清单选择包-p spec...,--package spec...指定包--workspace工作区中的全体成员--exclude SPEC...排除指定包编译选项--target triple为指定架构执行打包--target-dir directory用于存放生成的工件以及中间文件的目录特性选择--features features传递以空格或者逗号分隔的列表其中给出要启用的特性--all-features为给定的包启用全部可用特性--no-default-features不启用给定包的 default 特性清单选项--manifest-path path用于指定 Cargo.toml 文件的路径--frozen,--locked这两个选项用于保证 Cargo.lock 文件是最新的--offline禁止 Cargo 访问网络混杂选项-j N,--jobs N要并行运行的作业数量--features三件套是发布可选功能 crate 的核心通过default特性组合控制默认启用的功能集--no-default-features与--all-features常用于发布前对不同特性组合做编译验证。打包将本地包打包为可分发的压缩文件速查清单$ cargo package [options]-l,--list输出包中包含的文件不实际进行打包--no-verify构建包时不进行校验--no-metadata忽略缺少可读的元信息如描述信息或采用的授权协议时产生的警告--allow-dirty允许打包在版本控制系统中仍有未提交内容的包发布$ cargo publish [options]发布选项速查清单| 选项 | 说明 | | :- | :- | |--dry-run| 在不上传的情况下执行所有检查 | |--token token| 身份验证时使用的 API 令牌 | |--no-verify| 不要通过构建内容来验证内容 | |--allow-dirty| 允许打包具有未提交的 VCS 更改的工作目录 | |--index index| 要使用的注册表索引的 URL | |--registry registry| 要发布到的注册表的名称 | |-p spec,--package spec| 要发布的包 |推荐实践先用cargo package验证打包内容再以cargo publish --dry-run走一遍完整检查最后正式发布。yank撤回已发布版本从服务器的索引中删除以前发布的 crate 版本速查清单$ cargo yank --vers 1.0.7 foo--vers version要 yank 或 un-yank 的版本--undo撤消 yank将版本放回索引中--token token身份验证时使用的 API 令牌--index index要使用的注册表索引的 URL--registry registry要使用的注册表名称yank 并不真正删除包内容而是将其从索引中标记为不可再被新解析已有依赖该版本的下游项目仍可构建是发布事故如误发布含敏感信息的版本后的标准补救手段。延伸阅读与仓库配套资源更深入的语义与子命令参考请阅读官方 Cargo BookThe Cargo Book及其中文版rustwikiRust 语言语法、类型、集合与模式匹配速查Rust 备忘清单Cargo.toml所依赖的 TOML 语法细节表、数组、日期等TOML 备忘清单本文整理自 Reference 速查清单仓库的 Cargo 备忘清单该文档在 README 的软件包管理器分类中与 APT、Conan、Homebrew、YUM 等包管理工具并列收录整个清单站点由 package.json 定义的refs-cli构建管线将docs/下的 Markdown 生成静态页面并通过 netlify.toml 配置发布【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考