1.4 Hello Cargo
前言:
ps:第一章前三節(jié)的筆記由于作用不大,忽略。
?
????????????? 第一節(jié):簡(jiǎn)介
????????????? 第二節(jié):安裝rust
????????????? 第三節(jié):Hello World
?
Rustc
????????????? Rustc 是 Rust 編譯器的縮寫(xiě),是 Rust 語(yǔ)言的核心工具之一。
????????????? 雖然 Rust 語(yǔ)言和 Rustc 編譯器都有優(yōu)秀的性能和內(nèi)存安全特性,但是在處理大型項(xiàng)目時(shí),大型項(xiàng)目可能會(huì)產(chǎn)生復(fù)雜的依賴關(guān)系和代碼結(jié)構(gòu),這可能會(huì)影響 Rustc 編譯器的性能。在 Rustc 編譯器的工作方式中,代碼的類型推斷和 borrow checker 等功能需要進(jìn)行復(fù)雜的計(jì)算,這可能會(huì)導(dǎo)致編譯時(shí)間比較長(zhǎng)。此外,Rustc 編譯器的錯(cuò)誤信息和調(diào)試信息等也比較詳細(xì),這也會(huì)增加編譯時(shí)間和輸出文件的大小。
????????????? 因此對(duì)于一些比較大的項(xiàng)目,我們需要使用其他的工具,這些工具就叫cargo。
?
Cargo
????????????? Corgo是Rust的構(gòu)建系統(tǒng)和包管理工具:
-- 能構(gòu)建代碼、下載依賴的庫(kù)、構(gòu)建這些庫(kù)...
????????????? 安裝Rust 的時(shí)候會(huì)自動(dòng)安裝Cargo
測(cè)試cargo是否正常安裝的方法如下:
cargo --version
//查詢cargo版本,如果cargo正常安裝,會(huì)彈出cargo版本信息

?
使用Cargo創(chuàng)建項(xiàng)目
cargo new hello_cargo;
//創(chuàng)建一個(gè)cargo項(xiàng)目
//cargo new 項(xiàng)目名;

會(huì)創(chuàng)建一個(gè)新的目錄:hello_cargo
????????????? Cargo.toml
-- Cargo的配置模式
????????????? src目錄
-- main.rs
????????????? 初始化了一個(gè)新的 Git 倉(cāng)庫(kù): .gifignore
-- 可以使用其它的VCS或不使用VCS:cargo new的時(shí)候使用--vcs這個(gè)flag
?
Cargo.toml

????????????? [package] 區(qū)域標(biāo)題,下方內(nèi)容是用來(lái)配置package包的
-- name:項(xiàng)目名
-- version:項(xiàng)目版本
-- authors:項(xiàng)目作者
-- edition: 使用的Rust版本
????????????? [dependencies],另一個(gè)區(qū)域的開(kāi)始,它會(huì)列出項(xiàng)目的依賴項(xiàng)
????????????? 在Rust里,代碼的包被稱作crate
scr/main.rs
????????????? cargo生成的mcin.rs在src目錄下
????????????? Cargo.foml在項(xiàng)日頂層下
????????????? 源代碼都應(yīng)該在src目錄下
????????????? 頂層目錄可以放置:README、許可信息、配置文件和其它與程序源碼無(wú)關(guān)的文件
????????????? 如果創(chuàng)建項(xiàng)目時(shí)沒(méi)有使用cargo,也可以把項(xiàng)目轉(zhuǎn)化為使用cargo:
-- 把源代碼文件移到src下
-- 創(chuàng)建Cargo.toml并填寫(xiě)相應(yīng)的配置
?
構(gòu)建Cargo項(xiàng)目
?
cargobuild
????????????? cargo build
-- 創(chuàng)建可執(zhí)行文件:target/debug/hello_cargo(Linux)或target\debug \hello_cargo.exe(Windows)
-- 運(yùn)行可執(zhí)行文件:./target/debug/hello_cargo或.target\debug\hello_cargo.exe(Windows
????????????? 第一次運(yùn)行 corgo build 會(huì)在頂層目錄生成 cargo.lock 文件
-- 該文件負(fù)責(zé)追蹤項(xiàng)目依賴的精確版本
-- 不需要手動(dòng)修改該文件(宇宙毀滅了也不要手改?。?/p>
cargo run
????????????? Cargo run:編譯代碼+執(zhí)行結(jié)果
如果之前編譯成功過(guò),并且源碼沒(méi)有改變,那么就會(huì)直接運(yùn)行二進(jìn)制文件
?????????????

?
cargo check
????????????? cargo check:檢查代碼,確保能通過(guò)編譯,但是不產(chǎn)生任何可執(zhí)行文件
????????????? cargo check要比 cargo build 快得多
-- 編寫(xiě)代碼的時(shí)候可以連續(xù)反復(fù)的使用 cargo check檢查代碼,提高效率
為發(fā)布構(gòu)建
????????????? cargo build --release
-- 編譯時(shí)會(huì)進(jìn)行優(yōu)化,代碼會(huì)運(yùn)行的更快,但是編譯時(shí)間更長(zhǎng)
會(huì)在 target/release 而不是target/debug生成可執(zhí)行文件

????????????? 兩種配置:
-- target/debug用于開(kāi)發(fā)
-- target/release用于正式發(fā)布