日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Rust中Cargo的使用詳解_Rust語(yǔ)言

作者:天界程序員 ? 更新時(shí)間: 2022-12-11 編程語(yǔ)言

1、cargo簡(jiǎn)介

Cargo 是 Rust 的構(gòu)建系統(tǒng)和包管理器。?多數(shù) Rustacean 們使? Cargo 來(lái)管理他們的 Rust 項(xiàng)?,因?yàn)樗梢詾槟闾幚砗芏嗳蝿?wù),?如構(gòu)建代碼、下載依賴庫(kù)并編譯這些庫(kù)。(我們把代碼所需要的庫(kù)叫做 依賴(dependencies))。

查看cargo版本

cargo --version

我這里可以看到具體的版本好和日期

cargo 1.63.0 (fd9c4297c 2022-07-01)

2、使用cargo創(chuàng)建項(xiàng)目

cargo new hello_cargo
cd hello_cargo

第一行命令,創(chuàng)建了一個(gè)名為hello_cargo的目錄和項(xiàng)目。

進(jìn)入目錄可以看到以下目錄:

|-src
| |-main.rs
|-.gitignore
|-Cargo.toml

2.1、關(guān)于Cargo.toml

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
  • 第一行,[package], 是一個(gè)片段(section)標(biāo)題,表明下面的語(yǔ)句用來(lái)配置一個(gè)包。隨著我們?cè)谶@個(gè)文件增加更多的信息,還將增加其他片段(section)接踵而至的3行設(shè)置了Cargo編譯程序所需要的配置:name(項(xiàng)目名稱)、version(項(xiàng)目的版本)、edition(使用的Rust版本)
  • 最后一行,[dependcies], 是羅列項(xiàng)目依賴的片段的開(kāi)始,在Rust中,代碼包被稱為crates。當(dāng)然在這個(gè)項(xiàng)目我們并不需要其他的crate,不過(guò)后面我們會(huì)用到這個(gè)片段。

2.2 、關(guān)于src/main.rs

fn main() {
    println!("Hello, world!")
}

? Cargo為我們自動(dòng)生成一個(gè)“Hello,world!” 程序,正如我們之前編寫的示例helloWorld一樣,不同的是它將main.rs文件放到了src目錄下面。

? Cargo 期望源文件存放在src目錄中。項(xiàng)目根目錄只存放 README、license信息、配置文件和其他跟代碼無(wú)關(guān)的文件。使用Cargo幫助你保持項(xiàng)目干凈整潔,一切井井有條。

? 當(dāng)然如果沒(méi)有使用Cargo創(chuàng)建的項(xiàng)目,我們也可以轉(zhuǎn)化為一個(gè)Cargo項(xiàng)目,比如我之前的HelloWorld項(xiàng)目。我們可以新建目錄src、新建源文件main.rs在src目錄下、以及創(chuàng)建一個(gè)合適的Cargo.toml 文件。

3、構(gòu)建Cargo項(xiàng)目

我們現(xiàn)在已經(jīng)使用Cargo創(chuàng)建好了hello_cargo項(xiàng)目,現(xiàn)在我們進(jìn)入項(xiàng)目目錄

cd hello_cargo

然后我們可以使用Cargo中的build命令開(kāi)始構(gòu)建項(xiàng)目

cargo build

執(zhí)行命令后,會(huì)打印出如下結(jié)果:

Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
? ? Finished dev [unoptimized + debuginfo] target(s) in 1.09s

到這里我們首次運(yùn)行cargo build成功,你會(huì)發(fā)現(xiàn)此時(shí)項(xiàng)目目錄中多出了一個(gè)target目錄和Cargo.lock文件。

這和前端打包類似,如執(zhí)行npm run build 命令后npm會(huì)默認(rèn)生成一個(gè)dist目錄,里面就是源碼代碼經(jīng)過(guò)編譯和壓縮后可以放在服務(wù)器運(yùn)行的網(wǎng)頁(yè)頁(yè)面。其中生成的Cargo.lock文件也和package-lock.json類似,不用說(shuō)Cargo.toml和package.json 對(duì)應(yīng)。

最后我們可以運(yùn)行構(gòu)建成功后生成的可執(zhí)行文件

.\target\debug\hello_cargo.exe

如果一切順利,終端上應(yīng)該打印出Hello,world!

由于默認(rèn)的構(gòu)建?法是調(diào)試構(gòu)建(debug build),Cargo 會(huì)將可執(zhí)??件放在名為 debug 的?錄中。

4、構(gòu)建并運(yùn)行Cargo項(xiàng)目

? 在認(rèn)識(shí)了cargo build命令,我們知道它是用來(lái)構(gòu)建Cargo項(xiàng)目的,但是運(yùn)行項(xiàng)目需要我們自己去target目錄里面去找到可執(zhí)行文件,并執(zhí)行它。

? 接下來(lái)我們來(lái)認(rèn)識(shí)一個(gè)新的命令cargo run 。它可以構(gòu)建并運(yùn)行構(gòu)建后的可執(zhí)行文件。

cargo run 

打印結(jié)果:

?Finished dev [unoptimized + debuginfo] target(s) in 0.01s
? ? ?Running `target\debug\hello_cargo.exe`
Hello, world!

? 相信到了這里,我們心中一定明白這個(gè)命令,今后會(huì)是我們的長(zhǎng)期合作伙伴,魂?duì)繅?mèng)縈那種。

? 當(dāng)然有必要說(shuō)明一下,因?yàn)橹拔覀円呀?jīng)使用cargo build 命令構(gòu)建了hello_cargo項(xiàng)目 , 所以此時(shí)執(zhí)行的 cargo run 命令并沒(méi)有重新編譯,而是直接運(yùn)行了可執(zhí)行文件,打印出了Hello,world!

? 接下來(lái)我們看看,改變了源文件在執(zhí)行該命令會(huì)是什么結(jié)果:

?Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
? ? Finished dev [unoptimized + debuginfo] target(s) in 0.63s
? ? ?Running `target\debug\hello_cargo.exe`
Hello, Rust world!

? 這里我們看到結(jié)果里面有CompilingFinishedRunning 字樣,所以我們知道這次它重新編譯了該項(xiàng)目,并執(zhí)行了可執(zhí)行文件,打印出了新的結(jié)果:Hello, Rust world!

5、檢查代碼是否可編譯

? 接下來(lái)我們認(rèn)識(shí)應(yīng)該新的命令cargo check , 該命令可以快速檢查代碼確保可以編譯,但并不產(chǎn)生可執(zhí)行文件:

Checking hello_cargo v0.1.0 D:\RustLang\RustWorkSpace\hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.07s

如果一切順利控制臺(tái)會(huì)出現(xiàn)以上結(jié)果。

? 到了這里可能有人會(huì)問(wèn),為什么不直接執(zhí)行 cargo buildcargo run 命令呢?這樣還可以直接生成可執(zhí)行文件,多方便。

對(duì)于一個(gè)合格的新時(shí)代農(nóng)民,我們應(yīng)該持續(xù)定期去檢查我們的“莊稼”,讓它們可以健康成長(zhǎng),這樣我們才可以迎來(lái)大豐收。不然我們可能會(huì)餓肚子!

? 所以我們要習(xí)慣使用cargo check 定期檢查我們的代碼是否可編譯,避免不必要的后顧之憂。

6、發(fā)布(release)構(gòu)建

? 當(dāng)項(xiàng)?最終準(zhǔn)備好發(fā)布時(shí),可以使? cargo build --release 來(lái)優(yōu)化編譯項(xiàng)?。這會(huì)在target/release ?不是 target/debug 下?成可執(zhí)??件。這些優(yōu)化可以讓 Rust 代碼運(yùn)?的更快,不過(guò)啟?這些優(yōu)化也需要消耗更?的編譯時(shí)間。這也就是為什么會(huì)有兩種不同的配置:?種是為了開(kāi)發(fā),你需要經(jīng)常快速重新構(gòu)建;另?種是為?戶構(gòu)建最終程序,它們不會(huì)經(jīng)常重新構(gòu)建,并且希望程序運(yùn)?得越快越好。如果你在測(cè)試代碼的運(yùn)?時(shí)間,請(qǐng)確保運(yùn)? cargo build --release 并使? target/release 下的可執(zhí)??件進(jìn)?測(cè)試。

? 對(duì)于運(yùn)行發(fā)行版本我們可以使用 cargo run --release 命令

 Finished release [optimized] target(s) in 0.01s
     Running `target\release\hello_cargo.exe`
Hello, Rust world!

7、把Cargo當(dāng)作習(xí)慣

? 對(duì)于簡(jiǎn)單項(xiàng)目,Cargo并不比rustc提供了更多的優(yōu)勢(shì),不過(guò)隨著開(kāi)發(fā)深入,最終會(huì)證明它的價(jià)值,?旦程序壯?到由多個(gè)?件組成,亦或者是需要其他的依賴,讓 Cargo 協(xié)調(diào)構(gòu)建過(guò)程就會(huì)簡(jiǎn)單得多。

? 即便 hello_cargo 項(xiàng)??分簡(jiǎn)單,它現(xiàn)在也使?了很多在你之后的 Rust ?涯將會(huì)?到的實(shí)??具。其實(shí),要在任何已存在的項(xiàng)?上?作時(shí),可以使?如下命令通過(guò) Git 檢出代碼,移動(dòng)到該項(xiàng)??錄并構(gòu)建:

git clone example.com/test_project
cd test_project
cargo build

了解更多關(guān)于Cargo可以查閱Cargo相關(guān)文檔

8、總結(jié)

本章我們學(xué)習(xí)了Cargo的相關(guān)內(nèi)容:

  • 使用 cargo new 創(chuàng)建項(xiàng)目
  • 使用 cargo build 構(gòu)建項(xiàng)目
  • 使用 cargo run 一步構(gòu)建并運(yùn)行項(xiàng)目
  • 使用 cargo check 在不生成二進(jìn)制文件的情況下檢查項(xiàng)目是否可編譯
  • 使用 cargo build --release 構(gòu)建項(xiàng)目發(fā)行版本
  • 使用 cargo run --release 運(yùn)行發(fā)行版本,可測(cè)試發(fā)布版本的運(yùn)行時(shí)間

使? Cargo 的?個(gè)額外的優(yōu)點(diǎn)是,不管你使?什么操作系統(tǒng),其命令都是?樣的。所以從現(xiàn)在開(kāi)始本書將不再為 Linux 和 macOS 以及 Windows 提供相應(yīng)的命令。

原文鏈接:https://blog.csdn.net/qq_36362721/article/details/127647076

欄目分類
最近更新