Rust Cargo 中 Top 10 的命令

共 4437字,需浏览 9分钟

 ·

2022-01-08 18:54

Cargo 是 Rust 的包管理器,是一个功能强大的工具,可以让 Rust 编程变得非常有趣。它提供了可以在你日常编程中使用的各种命令。Cargo 支持的命令列表可以通过社区编写的 Rust crates 进行扩展。

一系列命令使 Cargo 成为任何 Rust 开发人员都值得了解的多功能工具。

本文讲解一系列值得了解和使用的有用 Cargo 命令。

最重要的 Cargo 指令

1. cargo install [options] crate...

cargo install 用于构建和安装 Rust 二进制文件。可以从多个来源安装 crate。默认位置是 crates.io,但是--git--path--registry选项可以更改源。

示例:cargo install sqlx 是使用 cargo 从 crates.io 安装 sqlx crate。

2. cargo uninstall [options] [spec...]

顾名思义,这个命令会删除一个用 cargo install 安装的包。

3. cargo tree [options]

cargo 树将显示对终端的依赖关系树。一个依赖于 “rand” 包的简单项目的例子:

myproject v0.1.0 (/myproject)
└── rand v0.7.3
    ├── getrandom v0.1.14
    │   ├── cfg-if v0.1.10
    │   └── libc v0.2.68
    ├── libc v0.2.68 (*)
    ├── rand_chacha v0.2.2
    │   ├── ppv-lite86 v0.2.6
    │   └── rand_core v0.5.1
    │       └── getrandom v0.1.14 (*)
    └── rand_core v0.5.1 (*)
[build-dependencies]
└── cc v1.0.50

4. cargo search [options] [query...]

这会在 crates.io 上对 crate 执行文本搜索。匹配的 crate 将与它们的描述一起以复制到 Cargo.toml 清单,以 TOML 格式显示。

使用 cargo 搜索的例子是:cargo search serde,它返回一个带有文本 serde 的行的 crate 列表和一个包含它们的版本号的描述。

serde = "1.0.130"                         # A generic serialization/deserialization framework
discord_typed_interactions = "0.1.0" # suppose you're working with discord slash commands and you want statically typed requ…
serde_json_experimental = "1.0.29-rc1" # A JSON serialization file format
alt_serde_json = "1.0.61" # A JSON serialization file format
serde_json = "1.0.70" # A JSON serialization file format
serde_partiql = "1.1.65" # A PartiQL data model serialization file format
cargo-geiger = "0.11.1" # Detects usage of unsafe Rust in a Rust crate and its dependencies.
serde-encrypt = "0.6.0" # Encrypts all the Serialize
serde-encrypt-core = "0.6.0" # Encrypts all the Serialize
typescript-definitions = "0.1.10" # serde support for exporting Typescript definitions
... and 2787 crates more (use --limit N to see more)

5. cargo-edit

此工具扩展 Cargo 以允许你通过从命令行修改 Cargo.toml 文件来添加、删除和升级依赖项。

当前可用的子命令包括:

  • cargo add
  • cargo rm
  • cargo upgrade
  • cargo set-version

要使用 cargo-edit,你需要先安装它,cargo install cargo-edit因为它是一个 cargo 扩展。

6. cargo +nightly udeps

cargo-udeps 用于在 Cargo.toml 中查找未使用的依赖项。

虽然这个工具的编译也适用于 Rust stable,但它需要 nightly Rust 才能实际运行。cargo-udeps是一个 cargo 扩展,所以你必须先安装才能使用。

你可以通过以下命令安装 cargo install cargo-udeps --locked

7. cargo expand

安装后,cargo expand打印出应用于当前 crate 的宏扩展结果和 #[derive] 扩展。这是详细的编译器命令的包装器:cargo rustc --profile=check -- -Zunpretty=expanded

通过以下命令安装 cargo install cargo-expand.

使用 cargo-expand 的例子

#[derive(Debug)]
struct S;

fn main() {
    println!("{:?}", S);
}

cargo expand:

#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std;
struct S;
#[automatically_derived]
#[allow(unused_qualifications)]
impl ::core::fmt::Debug for S {
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        match *self {
            S => {
                let mut debug_trait_builder = f.debug_tuple("S");
                debug_trait_builder.finish()
            }
        }
    }
}
fn main() {
    {
        ::std::io::_print(::core::fmt::Arguments::new_v1(
            &["""\n"],
            &match (&S,) {
                (arg0,) => [::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Debug::fmt)],
            },
        ));
    };
}

8. cargo tarpaulin

Tarpaulin 是 Cargo 构建系统的代码覆盖率报告工具。

通过以下命令安装:cargo install cargo-tarpaulin。目前 tarpaulin 仅适用于运行 Linux 的 x86_64 CPU 架构。cargo tarpaulin --ignore-tests用于计算应用程序的代码覆盖率,同时忽略测试功能。

9. cargo audit

cargo audit 可以通过命令 cargo install cargo-audit 安装并用于审核 Cargo.lock 文件,以查找向 RustSec 咨询数据库 报告的具有安全漏洞的 crate。

10. cargo deny

cargo-deny 是一个 cargo 插件,可让你检查项目的依赖关系图,以确保所有依赖项符合你的期望和要求。

它用于审核 Cargo.lock 文件中是否存在安全漏洞、限制特定依赖项的使用、它们的许可证、下载源、检测依赖项树中相同包的多个版本等等。

cargo install --locked cargo-deny && cargo deny init && cargo deny check安装 cargo-deny,使用默认配置初始化你的项目,然后针对你的项目运行所有检查。

以下示例检查许可,用于验证你使用的每个 crate 是否具有你认为可接受的许可条款。

cargo deny check licenses

要了解有关如何使用 cargo deny 的更多信息,访问 https://embarkstudios.github.io/cargo-deny/。

Cargo 命令的列表非常多,本文提供了其中的一个小示例,你可以使用它们,希望你了解 Cargo 的强大功能。

原文链接:https://dev.to/davidadewoyin/top-rust-cargo-commands-2b70



往期推荐


我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。


坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio

浏览 306
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报