Rust Cargo 中 Top 10 的命令

語言: CN / TW / HK

關注「 Rust程式設計指北 」,一起學習 Rust,給未來投資

大家好,我是螃蟹哥。

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

推薦閱讀

覺得不錯,點個贊吧

掃碼關注「 Rust程式設計指北