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 <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的學習,由於自己基礎不牢,再看這些不嚳天書。可能之后的進一步學習要待寫一些代碼暖暖手,並掌握相關知識后再行展開吧!感覺現在要是再進行下去的話恐怕自己都不知道自己在說些什么了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM