1、cargo簡介
Cargo 是 Rust 的構建系統(tǒng)和包管理器。?多數 Rustacean 們使? Cargo 來管理他們的 Rust 項?,因為它可以為你處理很多任務,?如構建代碼、下載依賴庫并編譯這些庫。(我們把代碼所需要的庫叫做 依賴(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
的目錄和項目。
進入目錄可以看到以下目錄:
|-src
| |-main.rs
|-.gitignore
|-Cargo.toml
2.1、關于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)標題,表明下面的語句用來配置一個包。隨著我們在這個文件增加更多的信息,還將增加其他片段(section) - 接踵而至的3行設置了Cargo編譯程序所需要的配置:name(項目名稱)、version(項目的版本)、edition(使用的Rust版本)
- 最后一行,
[dependcies]
, 是羅列項目依賴的片段的開始,在Rust中,代碼包被稱為crates。當然在這個項目我們并不需要其他的crate,不過后面我們會用到這個片段。
2.2 、關于src/main.rs
fn main() {
println!("Hello, world!")
}
? Cargo為我們自動生成一個“Hello,world!” 程序,正如我們之前編寫的示例helloWorld一樣,不同的是它將main.rs文件放到了src目錄下面。
? Cargo 期望源文件存放在src目錄中。項目根目錄只存放 README、license信息、配置文件和其他跟代碼無關的文件。使用Cargo幫助你保持項目干凈整潔,一切井井有條。
? 當然如果沒有使用Cargo創(chuàng)建的項目,我們也可以轉化為一個Cargo項目,比如我之前的HelloWorld項目。我們可以新建目錄src、新建源文件main.rs在src目錄下、以及創(chuàng)建一個合適的Cargo.toml 文件。
3、構建Cargo項目
我們現在已經使用Cargo創(chuàng)建好了hello_cargo項目,現在我們進入項目目錄
cd hello_cargo
然后我們可以使用Cargo中的build命令開始構建項目
cargo build
執(zhí)行命令后,會打印出如下結果:
Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 1.09s
到這里我們首次運行cargo build成功,你會發(fā)現此時項目目錄中多出了一個target目錄和Cargo.lock文件。
這和前端打包類似,如執(zhí)行
npm run build
命令后npm會默認生成一個dist目錄,里面就是源碼代碼經過編譯和壓縮后可以放在服務器運行的網頁頁面。其中生成的Cargo.lock文件也和package-lock.json類似,不用說Cargo.toml和package.json 對應。
最后我們可以運行構建成功后生成的可執(zhí)行文件
.\target\debug\hello_cargo.exe
如果一切順利,終端上應該打印出Hello,world!
。
由于默認的構建?法是調試構建(debug build),Cargo 會將可執(zhí)??件放在名為 debug 的?錄中。
4、構建并運行Cargo項目
? 在認識了cargo build
命令,我們知道它是用來構建Cargo項目的,但是運行項目需要我們自己去target目錄里面去找到可執(zhí)行文件,并執(zhí)行它。
? 接下來我們來認識一個新的命令cargo run
。它可以構建并運行構建后的可執(zhí)行文件。
cargo run
打印結果:
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\hello_cargo.exe`
Hello, world!
? 相信到了這里,我們心中一定明白這個命令,今后會是我們的長期合作伙伴,魂牽夢縈那種。
? 當然有必要說明一下,因為之前我們已經使用cargo build
命令構建了hello_cargo項目
, 所以此時執(zhí)行的 cargo run
命令并沒有重新編譯,而是直接運行了可執(zhí)行文件,打印出了Hello,world!
。
? 接下來我們看看,改變了源文件在執(zhí)行該命令會是什么結果:
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!
? 這里我們看到結果里面有Compiling
、Finished
、Running
字樣,所以我們知道這次它重新編譯了該項目,并執(zhí)行了可執(zhí)行文件,打印出了新的結果:Hello, Rust world!
。
5、檢查代碼是否可編譯
? 接下來我們認識應該新的命令cargo check
, 該命令可以快速檢查代碼確??梢跃幾g,但并不產生可執(zhí)行文件:
Checking hello_cargo v0.1.0 D:\RustLang\RustWorkSpace\hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.07s
如果一切順利控制臺會出現以上結果。
? 到了這里可能有人會問,為什么不直接執(zhí)行 cargo build
、cargo run
命令呢?這樣還可以直接生成可執(zhí)行文件,多方便。
對于一個合格的新時代農民,我們應該持續(xù)定期去檢查我們的“莊稼”,讓它們可以健康成長,這樣我們才可以迎來大豐收。不然我們可能會餓肚子!
? 所以我們要習慣使用cargo check
定期檢查我們的代碼是否可編譯,避免不必要的后顧之憂。
6、發(fā)布(release)構建
? 當項?最終準備好發(fā)布時,可以使? cargo build --release
來優(yōu)化編譯項?。這會在target/release
?不是 target/debug
下?成可執(zhí)??件。這些優(yōu)化可以讓 Rust 代碼運?的更快,不過啟?這些優(yōu)化也需要消耗更?的編譯時間。這也就是為什么會有兩種不同的配置:?種是為了開發(fā),你需要經??焖僦匦聵嫿ǎ涣?種是為?戶構建最終程序,它們不會經常重新構建,并且希望程序運?得越快越好。如果你在測試代碼的運?時間,請確保運? cargo build --release
并使? target/release
下的可執(zhí)??件進?測試。
? 對于運行發(fā)行版本我們可以使用 cargo run --release
命令
Finished release [optimized] target(s) in 0.01s
Running `target\release\hello_cargo.exe`
Hello, Rust world!
7、把Cargo當作習慣
? 對于簡單項目,Cargo并不比rustc
提供了更多的優(yōu)勢,不過隨著開發(fā)深入,最終會證明它的價值,?旦程序壯?到由多個?件組成,亦或者是需要其他的依賴,讓 Cargo 協(xié)調構建過程就會簡單得多。
? 即便 hello_cargo 項??分簡單,它現在也使?了很多在你之后的 Rust ?涯將會?到的實??具。其實,要在任何已存在的項?上?作時,可以使?如下命令通過 Git 檢出代碼,移動到該項??錄并構建:
git clone example.com/test_project
cd test_project
cargo build
了解更多關于Cargo可以查閱Cargo相關文檔
8、總結
本章我們學習了Cargo的相關內容:
- 使用
cargo new
創(chuàng)建項目 - 使用
cargo build
構建項目 - 使用
cargo run
一步構建并運行項目 - 使用
cargo check
在不生成二進制文件的情況下檢查項目是否可編譯 - 使用
cargo build --release
構建項目發(fā)行版本 - 使用
cargo run --release
運行發(fā)行版本,可測試發(fā)布版本的運行時間
使? Cargo 的?個額外的優(yōu)點是,不管你使?什么操作系統(tǒng),其命令都是?樣的。所以從現在開始本書將不再為 Linux 和 macOS 以及 Windows 提供相應的命令。文章來源:http://www.zghlxwxcb.cn/news/detail-435555.html
? 到了這里我們可以開始Rust的旅程了,go! go! go!文章來源地址http://www.zghlxwxcb.cn/news/detail-435555.html
到了這里,關于Rust之Cargo的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!