Rust 开发利器:深入解析 Cargo 所有官方命令及实战指南

文摘   2024-11-17 09:47   北京  

Cargo 是 Rust 的包管理器和构建系统,它极大地简化了 Rust 项目的管理和开发流程。本文将详细介绍 Cargo 的所有官方命令,包括其原理剖析和实战使用。通过本文,你将全面掌握 Cargo 的各项功能,提升 Rust 项目的开发效率。

1.cargo new:创建新项目

介绍

cargo new命令用于创建一个新的 Rust 项目。它会生成一个包含基本项目结构和配置文件的目录。

命令格式

cargo new <project_name>

原理剖析

cargo new会创建一个新的目录,并在其中生成Cargo.tomlsrc/main.rs文件。Cargo.toml是项目的配置文件,包含项目的元数据和依赖信息。src/main.rs是默认的 Rust 源文件,通常包含一个简单的main函数。

实战使用

cargo new my_project
cd my_project

生成的目录结构:

my_project/
├── Cargo.toml
└── src
└── main.rs

2.cargo init:在现有目录中初始化项目

介绍

cargo init命令用于在现有目录中初始化一个新的 Rust 项目。它不会创建新的目录,而是在当前目录中生成必要的文件和目录结构。

命令格式

cargo init

原理剖析

cargo init会在当前目录中生成Cargo.tomlsrc/main.rs文件。它适用于在现有目录中快速初始化 Rust 项目。

实战使用

假设你有一个名为existing_directory的目录,并且想要在其中初始化 Rust 项目。

cd existing_directory
cargo init

生成的目录结构:

existing_directory/
├── Cargo.toml
└── src
└── main.rs

3.cargo build:编译项目

介绍

cargo build命令用于编译当前项目。它会根据Cargo.toml文件中的配置编译项目,并生成可执行文件或库文件。

命令格式

cargo build

原理剖析

cargo build会解析Cargo.toml文件,下载并编译所有依赖项,然后编译项目代码。生成的文件会放在target/debug目录中。

实战使用

cargo build

生成的目录结构:

my_project/
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
└── debug
└── ...

4.cargo run:运行项目

介绍

cargo run命令用于编译并运行当前项目。它会自动调用cargo build编译项目,然后运行生成的可执行文件。

命令格式

cargo run

原理剖析

cargo run首先调用cargo build编译项目,然后运行生成的可执行文件。如果项目已经编译过,它会直接运行可执行文件。

实战使用

cargo run

输出:

Hello, world!

5.cargo test:运行测试

介绍

cargo test命令用于运行项目的测试代码。它会编译并运行所有标记为#[test]的函数。

命令格式

cargo test

原理剖析

cargo test会编译项目,并运行所有测试函数。测试函数通常放在src/lib.rssrc/main.rs中,并使用#[test]属性标记。

实战使用

src/main.rs中添加测试代码:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(23), 5);
    }
}

运行测试:

cargo test

输出:

running 1 test
test tests::test_add ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

6.cargo check:检查代码

介绍

cargo check命令用于检查代码是否可以编译,但不会生成可执行文件。它比cargo build更快,适合在开发过程中快速检查代码。

命令格式

cargo check

原理剖析

cargo check会解析Cargo.toml文件,下载并编译所有依赖项,然后检查项目代码是否可以编译。它不会生成可执行文件,因此速度更快。

实战使用

cargo check

输出:

Checking my_project v0.1.0 (/path/to/my_project)
Finished dev [unoptimized + debuginfo] target(s) in 0.12s

7.cargo update:更新依赖

介绍

cargo update命令用于更新项目的依赖项。它会根据Cargo.toml文件中的版本要求,更新Cargo.lock文件中的依赖项版本。

命令格式

cargo update

原理剖析

cargo update会解析Cargo.toml文件中的依赖项版本要求,并更新Cargo.lock文件中的依赖项版本。它不会修改Cargo.toml文件。

实战使用

cargo update

8.cargo clean:清理项目

介绍

cargo clean命令用于清理项目的编译输出。它会删除target目录中的所有文件。

命令格式

cargo clean

原理剖析

cargo clean会删除target目录中的所有文件,包括编译生成的可执行文件、库文件和中间文件。它不会删除Cargo.tomlCargo.lock文件。

实战使用

cargo clean

9.cargo doc:生成文档

介绍

cargo doc命令用于生成项目的文档。它会根据代码中的注释生成 HTML 文档。

命令格式

cargo doc

原理剖析

cargo doc会解析项目代码中的注释,并生成 HTML 文档。生成的文档会放在target/doc目录中。

实战使用

src/main.rs中添加文档注释:

/// Adds two numbers together.
///
/// # Examples
///
/// ```
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
fn add(a: i32, b: i32) -> i32 {
    a + b
}

生成文档:

cargo doc

生成的目录结构:

my_project/
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
└── doc
└── ...

10.cargo publish:发布项目

介绍

cargo publish命令用于将项目发布到 crates.io。它会打包项目,并上传到 crates.io 仓库。

命令格式

cargo publish

原理剖析

cargo publish会打包项目,并上传到 crates.io 仓库。在发布之前,需要确保Cargo.toml文件中的版本号和依赖项配置正确。

实战使用

首先,确保你已经登录到 crates.io。如果没有,使用cargo login命令登录。

cargo login

然后,发布项目:

cargo publish

11.cargo install:安装二进制包

介绍

cargo install命令用于从 crates.io 安装二进制包。它会下载并编译指定的包,并将其安装到系统中。

命令格式

cargo install <package_name>

原理剖析

cargo install会从 crates.io 下载指定的包,并编译生成可执行文件。生成的可执行文件会安装到系统中,通常放在~/.cargo/bin目录中。

实战使用

安装ripgrep包:

cargo install ripgrep

12.cargo search:搜索包

介绍

cargo search命令用于在 crates.io 上搜索包。它会列出与搜索词匹配的包及其版本信息。

命令格式

cargo search <search_term>

原理剖析

cargo search会从 crates.io 搜索与指定搜索词匹配的包,并列出包的名称、版本和描述信息。

实战使用

搜索与http相关的包:

cargo search http

输出:

http = "0.2.8"                 # Rust HTTP library
hyper = "0.14.20" # A fast and correct HTTP implementation for Rust.
reqwest = "0.11.4" # Higher level HTTP client library.

13.cargo fmt:格式化代码

介绍

cargo fmt命令用于格式化项目的代码。它会根据 Rust 的代码风格指南自动格式化代码。

命令格式

cargo fmt

原理剖析

cargo fmt会根据 Rust 的代码风格指南自动格式化项目中的所有 Rust 文件。它使用rustfmt工具来完成格式化任务。

实战使用

格式化项目代码:

cargo fmt

14.cargo clippy:代码检查

介绍

cargo clippy命令用于对项目代码进行静态检查。它会提供一些代码改进建议,帮助你编写更高质量的代码。

命令格式

cargo clippy

原理剖析

cargo clippy会解析项目代码,并提供一些代码改进建议。它使用clippy工具来完成代码检查任务。

实战使用

检查项目代码:

cargo clippy

15.cargo bench:运行基准测试

介绍

cargo bench命令用于运行项目的基准测试。它会编译并运行所有标记为#[bench]的函数。

命令格式

cargo bench

原理剖析

cargo bench会编译项目,并运行所有基准测试函数。基准测试函数通常放在benches目录中,并使用#[bench]属性标记。

实战使用

benches目录中添加基准测试代码:

use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);

运行基准测试:

cargo bench

16.cargo package:打包项目

介绍

cargo package命令用于打包项目。它会生成一个包含项目文件的.crate文件,准备发布到 crates.io。

命令格式

cargo package

原理剖析

cargo package会根据Cargo.toml文件中的配置,生成一个包含项目文件的.crate文件。生成的文件会放在target/package目录中。

实战使用

打包项目:

cargo package

生成的目录结构:

my_project/
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
└── package
└── my_project-0.1.0.crate

17.cargo uninstall:卸载二进制包

介绍

cargo uninstall命令用于卸载已安装的二进制包。它会从系统中删除指定的包。

命令格式

cargo uninstall <package_name>

原理剖析

cargo uninstall会从系统中删除指定的包。删除的包会从~/.cargo/bin目录中移除。

实战使用

卸载ripgrep包:

cargo uninstall ripgrep

18.cargo metadata:查看项目元数据

介绍

cargo metadata命令用于查看项目的元数据。它会输出项目的依赖关系、目标信息等。

命令格式

cargo metadata

原理剖析

cargo metadata会解析Cargo.toml文件,并输出项目的元数据信息。输出的信息包括项目的依赖关系、目标信息等。

实战使用

查看项目元数据:

cargo metadata

输出:

{
  "packages": [
    {
      "name""my_project",
      "version""0.1.0",
      "id""my_project 0.1.0 (path+file:///path/to/my_project)",
      "license"null,
      "license_file"null,
      "description"null,
      "source"null,
      "dependencies": [],
      "targets": [
        {
          "kind": [
            "bin"
          ],
          "crate_types": [
            "bin"
          ],
          "name""my_project",
          "src_path""/path/to/my_project/src/main.rs",
          "edition""2021",
          "doctest"false
        }
      ],
      "features": {},
      "manifest_path""/path/to/my_project/Cargo.toml",
      "metadata"null,
      "publish"null,
      "authors": [],
      "categories": [],
      "keywords": [],
      "readme"null,
      "repository"null,
      "edition""2021",
      "links"null
    }
  ],
  "workspace_members": [
    "my_project 0.1.0 (path+file:///path/to/my_project)"
  ],
  "resolve": {
    "nodes": [
      {
        "id""my_project 0.1.0 (path+file:///path/to/my_project)",
        "dependencies": [],
        "deps": [],
        "features": []
      }
    ],
    "root""my_project 0.1.0 (path+file:///path/to/my_project)"
  },
  "target_directory""/path/to/my_project/target",
  "version"1,
  "workspace_root""/path/to/my_project"
}

19.cargo tree:查看依赖树

介绍

cargo tree命令用于查看项目的依赖树。它会输出项目的依赖关系图。

命令格式

cargo tree

原理剖析

cargo tree会解析Cargo.toml文件中的依赖项,并输出项目的依赖关系图。输出的信息包括每个依赖项的版本和路径。

实战使用

查看项目依赖树:

cargo tree

输出:

my_project v0.1.0 (/path/to/my_project)

20.cargo vendor:生成依赖项的本地副本

介绍

cargo vendor命令用于生成项目依赖项的本地副本。它会下载所有依赖项,并将其放在vendor目录中。

命令格式

cargo vendor

原理剖析

cargo vendor会解析Cargo.toml文件中的依赖项,并下载所有依赖项。下载的依赖项会放在vendor目录中。

实战使用

生成依赖项的本地副本:

cargo vendor

生成的目录结构:

my_project/
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── vendor
└── ...


无论身在何处

有我不再孤单孤单

长按识别二维码关注我们




育儿之家 YEZJ
“Rust编程之道”,带你探索Rust语言之美,精进编程技艺,开启无限可能!🦀🦀🦀
 最新文章