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"
同樣你可以新增一個測試,方法沒有什麼特別的地方。