網站首頁 編程語言 正文
1、cargo簡介
Cargo 是 Rust 的構建系統和包管理器。?多數 Rustacean 們使? Cargo 來管理他們的 Rust 項?,因為它可以為你處理很多任務,?如構建代碼、下載依賴庫并編譯這些庫。(我們把代碼所需要的庫叫做 依賴(dependencies))。
查看cargo版本
cargo --version
我這里可以看到具體的版本好和日期
cargo 1.63.0 (fd9c4297c 2022-07-01)
2、使用cargo創建項目
cargo new hello_cargo cd hello_cargo
第一行命令,創建了一個名為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創建的項目,我們也可以轉化為一個Cargo項目,比如我之前的HelloWorld項目。我們可以新建目錄src、新建源文件main.rs在src目錄下、以及創建一個合適的Cargo.toml 文件。
3、構建Cargo項目
我們現在已經使用Cargo創建好了hello_cargo項目,現在我們進入項目目錄
cd hello_cargo
然后我們可以使用Cargo中的build命令開始構建項目
cargo build
執行命令后,會打印出如下結果:
Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
? ? Finished dev [unoptimized + debuginfo] target(s) in 1.09s
到這里我們首次運行cargo build成功,你會發現此時項目目錄中多出了一個target目錄和Cargo.lock文件。
這和前端打包類似,如執行
npm run build
命令后npm會默認生成一個dist目錄,里面就是源碼代碼經過編譯和壓縮后可以放在服務器運行的網頁頁面。其中生成的Cargo.lock文件也和package-lock.json類似,不用說Cargo.toml和package.json 對應。
最后我們可以運行構建成功后生成的可執行文件
.\target\debug\hello_cargo.exe
如果一切順利,終端上應該打印出Hello,world!
。
由于默認的構建?法是調試構建(debug build),Cargo 會將可執??件放在名為 debug 的?錄中。
4、構建并運行Cargo項目
? 在認識了cargo build
命令,我們知道它是用來構建Cargo項目的,但是運行項目需要我們自己去target目錄里面去找到可執行文件,并執行它。
? 接下來我們來認識一個新的命令cargo run
。它可以構建并運行構建后的可執行文件。
cargo run
打印結果:
?Finished dev [unoptimized + debuginfo] target(s) in 0.01s
? ? ?Running `target\debug\hello_cargo.exe`
Hello, world!
? 相信到了這里,我們心中一定明白這個命令,今后會是我們的長期合作伙伴,魂牽夢縈那種。
? 當然有必要說明一下,因為之前我們已經使用cargo build
命令構建了hello_cargo項目
, 所以此時執行的 cargo run
命令并沒有重新編譯,而是直接運行了可執行文件,打印出了Hello,world!
。
? 接下來我們看看,改變了源文件在執行該命令會是什么結果:
?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
字樣,所以我們知道這次它重新編譯了該項目,并執行了可執行文件,打印出了新的結果:Hello, Rust world!
。
5、檢查代碼是否可編譯
? 接下來我們認識應該新的命令cargo check
, 該命令可以快速檢查代碼確保可以編譯,但并不產生可執行文件:
Checking hello_cargo v0.1.0 D:\RustLang\RustWorkSpace\hello_cargo) Finished dev [unoptimized + debuginfo] target(s) in 0.07s
如果一切順利控制臺會出現以上結果。
? 到了這里可能有人會問,為什么不直接執行 cargo build
、cargo run
命令呢?這樣還可以直接生成可執行文件,多方便。
對于一個合格的新時代農民,我們應該持續定期去檢查我們的“莊稼”,讓它們可以健康成長,這樣我們才可以迎來大豐收。不然我們可能會餓肚子!
? 所以我們要習慣使用cargo check
定期檢查我們的代碼是否可編譯,避免不必要的后顧之憂。
6、發布(release)構建
? 當項?最終準備好發布時,可以使? cargo build --release
來優化編譯項?。這會在target/release
?不是 target/debug
下?成可執??件。這些優化可以讓 Rust 代碼運?的更快,不過啟?這些優化也需要消耗更?的編譯時間。這也就是為什么會有兩種不同的配置:?種是為了開發,你需要經常快速重新構建;另?種是為?戶構建最終程序,它們不會經常重新構建,并且希望程序運?得越快越好。如果你在測試代碼的運?時間,請確保運? cargo build --release
并使? target/release
下的可執??件進?測試。
? 對于運行發行版本我們可以使用 cargo run --release
命令
Finished release [optimized] target(s) in 0.01s Running `target\release\hello_cargo.exe` Hello, Rust world!
7、把Cargo當作習慣
? 對于簡單項目,Cargo并不比rustc
提供了更多的優勢,不過隨著開發深入,最終會證明它的價值,?旦程序壯?到由多個?件組成,亦或者是需要其他的依賴,讓 Cargo 協調構建過程就會簡單得多。
? 即便 hello_cargo 項??分簡單,它現在也使?了很多在你之后的 Rust ?涯將會?到的實??具。其實,要在任何已存在的項?上?作時,可以使?如下命令通過 Git 檢出代碼,移動到該項??錄并構建:
git clone example.com/test_project cd test_project cargo build
了解更多關于Cargo可以查閱Cargo相關文檔
8、總結
本章我們學習了Cargo的相關內容:
- 使用 cargo new 創建項目
- 使用 cargo build 構建項目
- 使用 cargo run 一步構建并運行項目
- 使用 cargo check 在不生成二進制文件的情況下檢查項目是否可編譯
- 使用 cargo build --release 構建項目發行版本
- 使用 cargo run --release 運行發行版本,可測試發布版本的運行時間
使? Cargo 的?個額外的優點是,不管你使?什么操作系統,其命令都是?樣的。所以從現在開始本書將不再為 Linux 和 macOS 以及 Windows 提供相應的命令。
原文鏈接:https://blog.csdn.net/qq_36362721/article/details/127647076
相關推薦
- 2022-07-22 String類的matches()方法的使用
- 2023-07-02 Python配置文件管理之ini和yaml文件讀取的實現_python
- 2022-07-19 linux臨時修改網卡
- 2022-06-29 C語言超詳細講解指針與結構體_C 語言
- 2022-09-17 利用Python實現快速批量轉換HEIC文件_python
- 2022-05-12 Android uniapp項目接入實例、uniapp混合開發踩坑手冊、uniapp Android
- 2022-04-04 Python?Opencv實現圖片切割處理_python
- 2022-08-22 Nginx配置使用詳解_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支