Rust中Cargo的使用詳解
1、cargo簡介
Cargo 是 Rust 的構(gòu)建系統(tǒng)和包管理器。?多數(shù) Rustacean 們使? Cargo 來管理他們的 Rust 項?,因為它可以為你處理很多任務(wù),?如構(gòu)建代碼、下載依賴庫并編譯這些庫。(我們把代碼所需要的庫叫做 依賴(dependencies))。
查看cargo版本
cargo --version
我這里可以看到具體的版本好和日期
cargo 1.63.0 (fd9c4297c 2022-07-01)
2、使用cargo創(chuàng)建項目
cargo new hello_cargo cd hello_cargo
第一行命令,創(chuàng)建了一個名為hello_cargo
的目錄和項目。
進(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]
, 是一個片段(section)標(biāo)題,表明下面的語句用來配置一個包。隨著我們在這個文件增加更多的信息,還將增加其他片段(section)接踵而至的3行設(shè)置了Cargo編譯程序所需要的配置:name(項目名稱)、version(項目的版本)、edition(使用的Rust版本) - 最后一行,
[dependcies]
, 是羅列項目依賴的片段的開始,在Rust中,代碼包被稱為crates。當(dāng)然在這個項目我們并不需要其他的crate,不過后面我們會用到這個片段。
2.2 、關(guān)于src/main.rs
fn main() { println!("Hello, world!") }
? Cargo為我們自動生成一個“Hello,world!” 程序,正如我們之前編寫的示例helloWorld一樣,不同的是它將main.rs文件放到了src目錄下面。
? Cargo 期望源文件存放在src目錄中。項目根目錄只存放 README、license信息、配置文件和其他跟代碼無關(guān)的文件。使用Cargo幫助你保持項目干凈整潔,一切井井有條。
? 當(dāng)然如果沒有使用Cargo創(chuàng)建的項目,我們也可以轉(zhuǎn)化為一個Cargo項目,比如我之前的HelloWorld項目。我們可以新建目錄src、新建源文件main.rs在src目錄下、以及創(chuàng)建一個合適的Cargo.toml 文件。
3、構(gòu)建Cargo項目
我們現(xiàn)在已經(jīng)使用Cargo創(chuàng)建好了hello_cargo項目,現(xiàn)在我們進(jìn)入項目目錄
cd hello_cargo
然后我們可以使用Cargo中的build命令開始構(gòu)建項目
cargo build
執(zhí)行命令后,會打印出如下結(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成功,你會發(fā)現(xiàn)此時項目目錄中多出了一個target目錄和Cargo.lock文件。
這和前端打包類似,如執(zhí)行
npm run build
命令后npm會默認(rèn)生成一個dist目錄,里面就是源碼代碼經(jīng)過編譯和壓縮后可以放在服務(wù)器運(yùn)行的網(wǎng)頁頁面。其中生成的Cargo.lock文件也和package-lock.json類似,不用說Cargo.toml和package.json 對應(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 會將可執(zhí)??件放在名為 debug 的?錄中。
4、構(gòu)建并運(yùn)行Cargo項目
? 在認(rèn)識了cargo build
命令,我們知道它是用來構(gòu)建Cargo項目的,但是運(yùn)行項目需要我們自己去target目錄里面去找到可執(zhí)行文件,并執(zhí)行它。
? 接下來我們來認(rèn)識一個新的命令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!
? 相信到了這里,我們心中一定明白這個命令,今后會是我們的長期合作伙伴,魂牽夢縈那種。
? 當(dāng)然有必要說明一下,因為之前我們已經(jīng)使用cargo build
命令構(gòu)建了hello_cargo項目
, 所以此時執(zhí)行的 cargo run
命令并沒有重新編譯,而是直接運(yùn)行了可執(zhí)行文件,打印出了Hello,world!
。
? 接下來我們看看,改變了源文件在執(zhí)行該命令會是什么結(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é)果里面有Compiling
、Finished
、Running
字樣,所以我們知道這次它重新編譯了該項目,并執(zhí)行了可執(zhí)行文件,打印出了新的結(jié)果:Hello, Rust world!
。
5、檢查代碼是否可編譯
? 接下來我們認(rèn)識應(yīng)該新的命令cargo check
, 該命令可以快速檢查代碼確??梢跃幾g,但并不產(chǎn)生可執(zhí)行文件:
Checking hello_cargo v0.1.0 D:\RustLang\RustWorkSpace\hello_cargo) Finished dev [unoptimized + debuginfo] target(s) in 0.07s
如果一切順利控制臺會出現(xiàn)以上結(jié)果。
? 到了這里可能有人會問,為什么不直接執(zhí)行 cargo build
、cargo run
命令呢?這樣還可以直接生成可執(zhí)行文件,多方便。
對于一個合格的新時代農(nóng)民,我們應(yīng)該持續(xù)定期去檢查我們的“莊稼”,讓它們可以健康成長,這樣我們才可以迎來大豐收。不然我們可能會餓肚子!
? 所以我們要習(xí)慣使用cargo check
定期檢查我們的代碼是否可編譯,避免不必要的后顧之憂。
6、發(fā)布(release)構(gòu)建
? 當(dāng)項?最終準(zhǔn)備好發(fā)布時,可以使? cargo build --release
來優(yōu)化編譯項?。這會在target/release
?不是 target/debug
下?成可執(zhí)??件。這些優(yōu)化可以讓 Rust 代碼運(yùn)?的更快,不過啟?這些優(yōu)化也需要消耗更?的編譯時間。這也就是為什么會有兩種不同的配置:?種是為了開發(fā),你需要經(jīng)??焖僦匦聵?gòu)建;另?種是為?戶構(gòu)建最終程序,它們不會經(jīng)常重新構(gòu)建,并且希望程序運(yùn)?得越快越好。如果你在測試代碼的運(yùn)?時間,請確保運(yùn)? cargo build --release
并使? target/release
下的可執(zhí)??件進(jìn)?測試。
? 對于運(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í)慣
? 對于簡單項目,Cargo并不比rustc
提供了更多的優(yōu)勢,不過隨著開發(fā)深入,最終會證明它的價值,?旦程序壯?到由多個?件組成,亦或者是需要其他的依賴,讓 Cargo 協(xié)調(diào)構(gòu)建過程就會簡單得多。
? 即便 hello_cargo 項??分簡單,它現(xiàn)在也使?了很多在你之后的 Rust ?涯將會?到的實??具。其實,要在任何已存在的項?上?作時,可以使?如下命令通過 Git 檢出代碼,移動到該項??錄并構(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)建項目
- 使用 cargo build 構(gòu)建項目
- 使用 cargo run 一步構(gòu)建并運(yùn)行項目
- 使用 cargo check 在不生成二進(jìn)制文件的情況下檢查項目是否可編譯
- 使用 cargo build --release 構(gòu)建項目發(fā)行版本
- 使用 cargo run --release 運(yùn)行發(fā)行版本,可測試發(fā)布版本的運(yùn)行時間
使? Cargo 的?個額外的優(yōu)點是,不管你使?什么操作系統(tǒng),其命令都是?樣的。所以從現(xiàn)在開始本書將不再為 Linux 和 macOS 以及 Windows 提供相應(yīng)的命令。
到此這篇關(guān)于Rust中Cargo的使用的文章就介紹到這了,更多相關(guān)Rust Cargo的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust語言和C/C++區(qū)別對比,Rust和C語言哪個好
Rust具有與C語言相當(dāng)?shù)乃俣群蛢?nèi)存效率,但無需手動內(nèi)存管理或垃圾回收,它擁有出色的工具支持、友好的編譯器和不斷發(fā)展的開發(fā)者社區(qū),使用Rust能提升程序性能,最重要的是,對Python開發(fā)者而言,Rust比C語言更容易學(xué)習(xí)2025-02-02Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法
這篇文章主要介紹了Rust?use關(guān)鍵字妙用|模塊內(nèi)容拆分,文中還給大家介紹use關(guān)鍵字的習(xí)慣用法,快速引用自定義模塊內(nèi)容或標(biāo)準(zhǔn)庫,以此優(yōu)化代碼書寫,需要的朋友可以參考下2022-09-09