簡介
Cargo 是 Rust 的構建系統和包管理工具。
主要負責三個工作:
- 構建
build
代碼 - 下載你代碼 依賴
dependencies
的包裝箱crate
- 編譯
你的源碼
和包裝箱crate
。
查看cargo是否被正確安裝
cargo --version
項目的目錄結構
要使用cargo工具,項目的目錄結構需要如下組織:
project_name
|- src // 放置源文件的目錄
|- main.rs / lib.rs // 源文件
|- Cargo.toml // Cargo的配置文件
Cargo.toml
toml
- 要使用cargo工具,必須在項目的根目錄下建有其配置文件。
- TOML(Tom’s Obvious Minimal Language)格式。簡單理解就是ini的進化版。
注意: Cargo.toml的C是大寫
文件預覽
Cargo.toml
[package] // 表明下面的語句用來配置一個包
name = "project_name" // 項目名
version = "0.0.1" // 版本
authors = ["Your name <[email protected]>"] // 作者
[dependencies] // 依賴 (如果有)
rand = “^0.3.0” // 依賴的外部包裝箱,以及其需要版本
包裝箱 crate
- 項目除了自己編寫的源碼外,還能依賴
dependencises
外部包裝箱crate
以及其 所要求的版本。 - 包裝箱
crate
是一個 Rust 代碼的包。類似於其他語言的庫library
或者package
。
包裝箱的版本
Cargo理解語義化版本,它是一個編寫版本號的標準。
- “^0.3.0” 代表”任何兼容0.3.0的版本”
- “0.3.0” 代表”^0.3.0的簡寫”
- “=0.3.0” 代表”只使用0.3.0的版本”
- 也可以指定版本範圍
具體細節可以參考 cargo文檔。
Cargo.lock
依賴”^0.3.0”獲得了兼容的最新版本,如0.3.14。但過了一段時間後推出了兼容的0.3.15版本修復了0.3.14的bug的同時,卻包含着破壞現有代碼的迴歸缺陷(regression)。這可如何是好?
Cargo.lock 閃亮登場
當你第一次build項目時,Cargo 會查找所有符合你的 依賴dependencies
要求的版本,並記錄到到 Cargo.lock
文件裏。當你在未來再次
build 你的項目時,Cargo 會注意到 Cargo.lock 的存在,並接着使用 Cargo.lock 中指定的版本而不是再次去做 查明和記錄版本
的工作。這讓你有了一個可重複的自動構建。換句話說,項目會保持在依賴0.3.14的版本。直到我們顯式的在 Cargo.toml 中升級。
文件預覽
Cargo.lock
...
[[package]]
name = "libc"
version = "0.2.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rand"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
...
Cargo的構建(build)和運行(run)
在創建好項目的 目錄結構
和 Cargo.toml
後,就可以使用cargo來構建和運行項目了。
構建 build
在 項目根目錄
下輸入 cargo build
就可構建項目(編譯項目),
在 ./target/debug/project_name
中找到編譯後的 可執行文件(exe)
運行。
cargo build
cargo build
默認是以 debug
方式編譯,在項目 release
時,使用 --release
參數編譯最終版本。
cargo build --release
運行 run
也可以在 項目根目錄
下使用 cargo run
一個步驟來代替上述的 cargo build + run exe
兩個步驟。
cargo run
Cargo的創建(new)
除了可以手動創建 目錄結構
和 Cargo.toml
外,可以使用 Cargo new
來自動創建。在執行此命令的目錄下創建名爲project_name的目錄,包含Cargo.toml,自動創建了 src/main.rs
。並且,還自動創建了git的倉庫。
cargo new project_name --bin
其中 --bin
表示是新建一個可執行文件。