1. 程式人生 > 實用技巧 >Rust基礎學習筆記(五):Cargo與Crates.io(上)

Rust基礎學習筆記(五):Cargo與Crates.io(上)

最近複習鴿了幾天,今天繼續學,希望在考試之前搞定這個官方文件 もうダメ。。。。

本章學習Cargo和Crates.io相關,內容有下:

  • 自定義構建
  • 向crates.io提交libraries
  • 利用工作空間Workspace組織大型工程
  • 從crates.io下載二進位制庫
  • 用自定義命令拓展Cargo

自定義構建

基礎

雖然構建方法已經預定義了,但是也可以自定義

Cargo使用兩個profile,一個是dev(用在單純build指令中),一個是release(用在cargo build --release中)。兩者都可以通過在Cargo.toml中新增[profile.*]標籤自定義:

[profile.dev]
opt
-level = 0 [profile.release] opt-level = 3

[profile.release]
opt-level = 1    //Override!

這裡的opt-level指編譯器的優化等級,數值為0-3,數值越高優化越多編譯更遲緩執行更高效。

向Crates.io提交Crate

通過三斜槓新增檔案註釋

通過檔案註釋讓別人明白該如何使用它,生成HTML文件,支援Markdown格式

///#Example
///```
///let arg = 5;
///```

cargo doc生成這個HTML文件

cargo doc --open在瀏覽器中開啟你可能需要的文件

檔案註釋通常包括使用例、引發的錯誤/Panics與安全性(是否為unsafe)。可根據具體情況新增。

//考完試了,繼續摸

你也可以通過cargo test來執行註釋中的程式碼塊,這些程式碼將作為測試執行,用來確定例子與原始碼的更新是否同步。

通過

//! ....
//!   ....

來完成對整個Crate的總括註釋。要注意這些註釋一般寫進src/lib.rs,在開啟doc時直接顯示。

通過pub use完善公共API

可以方便使用者的使用,不用抽絲剝繭地呼叫類方法。

使用方法就是在需要使用的方法名前面加上 pub use self::...

舉例:

pub use self::kinds::PrimaryColor;

pub mod kinds {
    pub fn PrimaryColor(){...}
}

呼叫時無第一句:
use art::kinds::PrimaryColor;
有
ust art::PrimaryColor;

真正提交自己的Crates:

首先要申請一個賬號

注意的是要在 crates.io/me/ 更改API金鑰並通過$ cargo login [pwd]登入

編輯詳細資訊(元資料)

檔案:Cargo.toml

程式碼:

[package]
name = "Whatever_u_like" //先到先得
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2020"
description = "*#>>"
license = "?" //許可證

[dependencies]

最後$cargo publish提交。同樣可以通過這個指令更新。

你可以yank一個版本來阻止使用者繼續使用它,無論是出於版本老舊還是嚴重漏洞,但是由於程式碼實際上不會被刪除,要是想刪除還是用reset。通過undo來撤銷。

$cargo yank --vers 1.0.1
$cargo yank --vers 1.0.1 --undo

使用Workspaces

不同的相關packages組成workspaces

新建一個資料夾,在裡面新增檔案Cargo.toml:

[workspace]

members = [
    "adder",
]

然後build,就會得到名為adder的子資料夾,這是新建的package,具有完整的基本結構。同時會新建一個target資料夾,裡面是所有原始碼的編譯後文件。

├── Cargo.lock
├── Cargo.toml
├── adder
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── target

通過修改Cargo.toml和執行Cargo new來在工作空間裡面建立新的Librarty Crate,不過要用--lib引數:

cargo new add-one --lib      

新增依賴

比如你要在相同的工作區域裡將add-one新增為adder的依賴,由於Cargo不預設工作區間的各crate互相依賴,因此要手動在adder的Cargo.toml裡新增:

[dependencies]

add-one = { path = "../add-one" }

要想新增外部依賴,就要在相應的資料夾裡新增Cargo.toml的依賴,最後在父資料夾的Cargo.lock儲存相關資訊。這樣做是保證各個Crate用的是相同版本的外部依賴,但是這個依賴只能在被宣告的區間裡使用。新增方法:

[dependencies]
rand = "0.5.5"

同樣你可以新增一個測試,方法沒有什麼特別的地方。