首页 > 其他分享 >cargo 工具的使用详解 ---从cargo开始规范代码

cargo 工具的使用详解 ---从cargo开始规范代码

时间:2024-12-23 15:31:03浏览次数:6  
标签:Cargo cargo package -- 示例 --- 详解 test

cago命令参数

cargo --list 
Installed Commands:
    add                  Add dependencies to a Cargo.toml manifest file
    b                    alias: build
    bench                Execute all benchmarks of a local package
    build                Compile a local package and all of its dependencies
    c                    alias: check
    check                Check a local package and all of its dependencies for errors
    clean                Remove artifacts that cargo has generated in the past
    clippy               Checks a package to catch common mistakes and improve your Rust code.
    config               Inspect configuration values
    d                    alias: doc
    doc                  Build a package's documentation
    fetch                Fetch dependencies of a package from the network
    fix                  Automatically fix lint warnings reported by rustc
    fmt                  Formats all bin and lib files of the current crate using rustfmt.
    generate-lockfile    Generate the lockfile for a package
    git-checkout         This command has been removed
    help                 Displays help for a cargo subcommand
    info                 Display information about a package in the registry
    init                 Create a new cargo package in an existing directory
    install              Install a Rust binary
    locate-project       Print a JSON representation of a Cargo.toml file's location
    login                Log in to a registry.
    logout               Remove an API token from the registry locally
    metadata             Output the resolved dependencies of a package, the concrete used versions including overrides, in machine-readable format
    miri
    new                  Create a new cargo package at <path>
    owner                Manage the owners of a crate on the registry
    package              Assemble the local package into a distributable tarball
    pkgid                Print a fully qualified package specification
    publish              Upload a package to the registry
    r                    alias: run
    read-manifest        Print a JSON representation of a Cargo.toml manifest.
    remove               Remove dependencies from a Cargo.toml manifest file
    report               Generate and display various kinds of reports
    rm                   alias: remove
    run                  Run a binary or example of the local package
    rustc                Compile a package, and pass extra options to the compiler
    rustdoc              Build a package's documentation, using specified custom flags.
    search               Search packages in the registry. Default registry is crates.io
    t                    alias: test
    test                 Execute all unit and integration tests and build examples of a local package
    tree                 Display a tree visualization of a dependency graph
    uninstall            Remove a Rust binary
    update               Update dependencies as recorded in the local lock file
    vendor               Vendor all dependencies for a project locally
    verify-project       Check correctness of crate manifest
    version              Show version information
    yank                 Remove a pushed crate from the index

以下是对 Cargo 工具参数用法 的总结,根据其主要功能进行分类:


1. 项目管理相关

  • new
    创建一个新项目(cargo new <project_name>)。
    示例:

    cargo new my_project --bin  # 创建一个二进制项目
    cargo new my_library --lib  # 创建一个库项目
    
  • init
    在现有目录中初始化 Cargo 项目(cargo init)。
    示例:

    cargo init --bin  # 初始化为二进制项目
    
  • locate-project
    打印当前目录中 Cargo 项目的 Cargo.toml 文件位置。
    示例:

    cargo locate-project
    
  • verify-project
    检查 Cargo.toml 的正确性,确保项目配置无误。
    示例:

    cargo verify-project
    

2. 依赖管理

  • add
    Cargo.toml 中添加依赖。
    示例:

    cargo add serde  # 添加 serde 依赖
    cargo add tokio --features full  # 添加 tokio 依赖,并启用 `full` 特性
    
  • remove / rm
    Cargo.toml 中移除依赖。
    示例:

    cargo rm serde
    
  • update
    根据 Cargo.toml 文件更新 Cargo.lock 中的依赖版本。
    示例:

    cargo update
    
  • fetch
    下载依赖但不编译,用于预加载依赖。
    示例:

    cargo fetch
    
  • vendor
    将项目的所有依赖存储到本地 vendor/ 目录,用于离线构建。
    示例:

    cargo vendor
    
  • generate-lockfile
    手动生成 Cargo.lock 文件,而不需要编译代码。
    示例:

    cargo generate-lockfile
    

3. 构建与运行

  • build / b
    编译当前项目及其依赖。
    示例:

    cargo build --release  # 以发布模式构建
    
  • check / c
    检查项目是否存在错误,但不实际生成二进制文件。
    示例:

    cargo check
    
  • run / r
    构建并运行项目的二进制文件。
    示例:

    cargo run -- <arguments>  # 向程序传递命令行参数
    

4. 文档生成

这要求我们先写代码,在写文档,是一种已代码实践为中心的编程设计思维。

  • doc / d
    构建文档。
    示例:
    cargo doc --open  # 构建并在浏览器中打开文档
    

cargo可以将代码中的结构和注释生成代码阅读文档,让使用着更加容易上手!
注释中///和//!的区别:

特性 /// //!
作用范围 单个代码项(函数、结构体、枚举等) 当前模块或整个 crate
用途 为具体的代码项提供详细说明和使用示例 为模块或 crate 提供整体性描述和使用上下文
位置 放在被注释项的上方 放在模块或 crate 的顶部
常见用途 描述函数的功能、参数、返回值;描述结构体的字段等 描述模块的整体功能;描述 crate 的用途和包含的模块等
生成文档中的展示 具体项的文档页中显示 模块或 crate 的主页中显示
  • rustdoc
    使用指定的标志生成文档。
    示例:
    cargo rustdoc -- --cfg feature="docs"  # 定制化生成文档
    

doc和rustdoc的区别:
功能 cargo doc cargo rustdoc
默认生成文档 ✅ ✅
支持自定义 rustdoc 标志 ❌ ✅
控制细节与条件编译 ❌ ✅
简单总结:

如果你只需要生成普通文档,用 cargo doc 即可。
如果需要更复杂的控制或调试文档生成,则使用 cargo rustdoc。例如,仅为某些特性生成文档,或处理条件编译代码块。例如生成 JSON 格式文档以供其他工具使用。

5. 测试与基准测试

  • test / t
    运行单元测试和集成测试。
    示例:
    cargo test  # 运行所有测试
    cargo test my_test  # 运行特定测试
    

cargo 可识别的test分为单测和集成测试,

  1. 单元测试目录在代码同一文件中,用#[cfg(test)]标识,示例:
#[cfg(test)] // 测试模块仅在运行测试时编译
mod tests {
  use super::*; // 导入当前模块的代码

  #[test] // 表示这是一个测试函数
  fn test_add() {
      assert_eq!(add(2, 3), 5); // 检查表达式是否相等
  }

  #[test]
  fn test_add_negative() {
      assert_eq!(add(-2, -3), -5);
  }
}
///assert!(condition):当条件为 false 时,测试失败。
///assert_eq!(a, b):当 a 和 b 不相等时,测试失败。
///assert_ne!(a, b):当 a 和 b 相等时,测试失败。
///panic!():手动触发失败,用于特定条件下。
  1. 集成测试在src同一级目录中,使用use导入库,测试库的所有公共接口
///your_project/
///├── Cargo.toml
///├── src/
///│   └── lib.rs
///└── tests/
///    └── integration_test.rs

// tests/integration_test.rs

use your_project_name; // 导入库,项目名在 Cargo.toml 中指定

#[test]
fn test_add() {
    assert_eq!(your_project_name::add(2, 3), 5);
}

覆盖率这里需要下载cargo提供的工具,cargo-llvm-cov或者grcov ,另行了解

  • bench
    运行基准测试(需要启用 bench 功能)。 这里的bench运行需要criterion 依赖,并且编写bench的代码。
    示例:
    cargo bench
    

6. 清理与格式化

  • clean
    清除之前生成的构建产物。
    示例:

    cargo clean
    
  • fmt
    使用 rustfmt 格式化代码,保持官方风格一致性。
    示例:

    cargo fmt
    
  • fix
    自动修复代码中的常见问题(如编译警告)。可以结合clippy报告使用, clippy 是 Rust 的一个工具,专门用于发现代码中的潜在问题(例如性能优化、可能的错误或代码风格问题)
    示例:

    cargo fix --allow-dirty
    

7. 发布与注册

这里的publish、login、yank与发布到官方库有关。

  • publish
    将包上传到注册表(如 crates.io)。
    示例:

    cargo publish
    
  • package
    将包打包为 .crate 文件(但不发布)。
    示例:

    cargo package
    
  • login / logout
    登录或注销注册表账户。
    示例:

    cargo login <API-TOKEN>
    cargo logout
    
  • yank
    从注册表中移除发布的 crate。
    示例:

    cargo yank --vers 1.0.0
    

8. 调试与信息

  • clippy
    使用 clippy 检查代码潜在问题和改进建议。
    示例:

    cargo clippy --fix  # 自动修复可修复的问题
    
  • tree
    显示项目依赖的层次结构。
    示例:

    cargo tree
    
  • metadata
    输出项目的元数据(如依赖树)。
    示例:

    cargo metadata --format-version 1
    
  • info
    显示注册表中包的信息。
    示例:

    cargo info serde
    

9. 其他辅助命令

  • help
    查看命令帮助。
    示例:

    cargo help build
    
  • version
    显示 Cargo 版本信息。
    示例:

    cargo version
    

总结

Cargo 的命令全面涵盖了 Rust 项目生命周期的各个方面:

  • 创建与管理项目:newinitverify-project
  • 添加与移除依赖:addremoveupdate
  • 构建与运行项目:buildcheckrun
  • 测试与基准测试:testbench
  • 文档生成与格式化:docfmt
  • 发布与注册:publishpackageyank

熟悉这些命令可以极大提升开发效率和项目管理的便利性。

标签:Cargo,cargo,package,--,示例,---,详解,test
From: https://www.cnblogs.com/learnForLife/p/18624153

相关文章

  • 死锁分析-(using intersect多个索引引发死锁)
    MySQL:8.0.32线上有一个SQL偶然报出死锁信息,是一类根据唯一ID和status进行更新的SQL。age是唯一字段,理论上来说根据唯一字段更新不应该出现死锁,但在update执行计划中发现,并不止使用了age索引,还使用了status索引。【Usingintersect(uni_age,idx_name);Usingwhere;Usingtemp......
  • 青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
    青少年编程与数学02-004Go语言Web编程17课题、静态文件一、静态文件静态文件的常见类型包括:静态文件的特点:在Web服务器上托管静态文件:结论:二、静态文件处理使用http.FileServer使用http.StripPrefix组合使用注意事项使用第三方库三、上传和下载文件上传HTML表单(up......
  • 设计模式-备忘录模式
    背景游戏角色恢复问题:角色有攻击力和防御力,在Boss站前保存攻击力和防御力,大战之后,攻击力和防御力下降,从备忘录恢复到大战前的状态。传统思路:一个游戏对象,对应一个保存状态对象。当对象很多时不利于管理,开销也很大。基本介绍在不破坏封装性的前提下,捕获一个对象的内部状态......
  • C++STL----Vector容器
    本文章简单的介绍了STL中的vector容器以及vector容器的一些常见的用法。文章目录一、Vector是什么?二、Vector的定义初始化三、Vector的数据插入四、Vector的使用归纳总结一、Vector是什么?vector表示对象的集合vector本身其实是模板vector不是一个单独的类型,而是C......
  • flink-配置文件
    packagecom.ecarx.sumatra.data.tab.conf;importorg.apache.flink.api.java.utils.ParameterTool;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.io.IOException;importjava.util.Optional;publicclassConfigManager{privatestat......
  • renben-openstack-glance操作
     1.#查看glance-api配置文件  ip地址自己对应好,看好conlloer和computer节点[root@controller~]#grep-vE'^#|^$'/etc/glance/glance-api.conf[DEFAULT]bind_host=0.0.0.0bind_port=9292workers=4image_cache_dir=/var/lib/glance/imag......
  • TMC6300-LA-T直流无刷(BLDC)电机驱动原理图设计
    一、TMC6300-LA-T简介:        TMC6300由单个锂离子电池或双个AA电池共同工作,最适合用于电池操作的设备。使用CPU的6线控制操作带有块或正弦换向的BLDC电机。集成电源mosfets处理电机电流高达2A。保护和诊断功能支持稳健和可靠的操作。它的集成充电泵,为一流的RDSon和超......
  • Docker详解
    Docker教程:黑马程序员Docker容器化技术,从零学会Docker教程(28集)认识Docker什么是沙箱机制1.为什么需要沙箱机制默认情况下,一个应用程序可以访问一台机器上的所有资源,包括CPU,内存,文件系统,网络等等,但是这是不安全的,因为一旦随意操作资源,这很有可能造成数据泄露或者破坏......
  • Python数据分析-爬虫实战
    数据分析1.爬虫相关概念爬虫的分类聚焦爬虫完成某一项特定数据的采集百分之九十的爬虫都是聚焦爬虫通用爬虫什么内容都采集,都存下来搜索引擎百度谷歌增量爬虫既可以是聚焦爬虫也可以是通用爬虫当内容发生变化,可以增量的获取内容(比如爬取博客,第二天又新......
  • Git超详解(Git、码云、GitLab)
    Git【Git】SSLcertificateproblem:unabletogetlocalissuercertificate错误的解决办法git错误SSLcertificateproblem:unabletogetlocalissuercertificate【Git】SSLcertificateproblem:unabletogetlocalissuercertificate错误的解决办法【IntelliJ......