最近復習鴿了幾天,今天繼續學,希望在考試之前搞定這個官方文檔 もうダメ。。。。
本章學習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 <you@example.com>"] 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"
同樣你可以添加一個測試,方法沒有什么特別的地方。
怎么下載別人的cargo
按官方文檔的說法,目前還只能安裝有Binary Target的包:
Binary Target:源碼可編譯為可執行程序
Library Target:自己不能單獨運行,可以和其他crate結合。
兩個target可以共存的!
下載到那里去了? $PATH/bin 而且它會提示你的
怎么用? 自然地把它當成cargo的指令參數就行了,這些包會成為你有用的工具。
后記
幾乎時隔一個月才再次開始Rust的學習,由於自己基礎不牢,再看這些不嚳天書。可能之后的進一步學習要待寫一些代碼暖暖手,並掌握相關知識后再行展開吧!感覺現在要是再進行下去的話恐怕自己都不知道自己在說些什么了。。。