Cargo 是 Rust 的構建系統和包管理工具,Cargo 負責三個工做:構建你的代碼,下載你代碼依賴的庫並便利這些庫。最簡單的 Rust 程序並無任何依賴,但隨着編寫的程序更加複雜而不得不引入其餘庫,若是一開始就使用 Cargo的話,這將會簡單許多。git
若是是使用官方安裝包的話,Rust 已經自帶了 Cargo,也能夠打開一個終端,輸入:github
$ cargo
若是能夠看到 Usage 等信息,那一切 OK!app
如今使用 Cargo 編寫 Hello world 程序。打開一個終端,進入一個合適的目錄,輸入:工具
$ cargo new hello_world --bin
而後,能夠看到:測試
Created binary (application) `hello_world` project
此時,已經在當前目錄下建立了一個基於 Cargo 管理的項目,名爲 hello_world。--bin 表示該項目將生成一個可執行文件。具體生成的項目目錄結構以下:ui
.
├── Cargo.toml
└── srcdebug
└── main.rs ----
打開 main.rs 文件能夠看到,cargo new 命令已經生成好了 hello_world 運行必須的代碼:調試
fn main() { println!("Hello, world!"); }
而後進入到這個項目目錄,輸入:code
$ cargo build
稍等片刻:ci
Compiling hello_world v0.1.0 (file:/youpath/hello_world) Finished debug [unoptimized + debuginfo] target(s) in 0.91 secs
那說明程序已經編譯好了。接着:
$ cargo run Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs Running `target\debug\hello_world` Hello, world!
OK!hello_world 已經運行並輸出了。其實,這裏也能夠不用執行 cargo build 而直接 cargo run, rust 會爲咱們編譯並運行程序:
& cargo run Compiling hello_world v0.1.0 (file:/yourpath/hello_world) Finished debug [unoptimized + debuginfo] target(s) in 0.35 secs Running `target\debug\hello_world.exe` Hello, world!
這是一個 基於 Cargo 的項目的結構圖:
.
├── Cargo.toml
├── Cargo.lock
├── tests
├── examples
├── benches
├── target
├── debug └── release
└── src
├── lib.rs └── main.rs
Cargo.toml 和 Cargo.lock 位於項目的根目錄下,是 Cargo 代碼管理的核心,Cargo 工具的全部活動均基於這兩個文件。
外部測試源碼文件位於 tests 目錄下。
示例程序源碼文件位於 examples 目錄下。
基準測試源碼文件位於 benches 目錄下。
target 目錄下 debug 和 release 目錄用於存放編譯生成的中間文件和最終的可執行文件。
Cargo.toml 是 Cargo 特有的項目數據描述文件,存儲了項目的全部信息,咱們須要適當的修改這個文件讓本身的 Rust 項目可以按照指望的方式進行構建、測試和運行。而 Cargo.lock 文件是 Cargo 工具根據同一項目下的 Cargo.toml 文件生成的項目依賴詳細清單文件,不須要直接去修改這個文件,因此通常不用管他。
打開上面建立的 hello_world 項目的 Cargo.toml 文件:
[package] name = "hello_world" version = "0.1.0" authors = ["dangcheng <dangcheng@hotmail.com>"] [dependencies]
Cargo.toml 文件是由諸如 [package] 或 [dependencies] 這樣的段落組成,每個段落又有多個字段組成,這些段落和字段描述了項目組織的基本信息。
[package] 段落描述了軟件開發者對本項目的元數據描述信息。name 字段定義了項目的名稱,version 字段定義了項目的當前版本,authors 字段定義了項目的做者。
[deoendencies] 段落用於定義項目依賴。使用 Cargo 工具的最大優點就在於,可以對該項目進行方便、統一和靈活的管理。經常使用的依賴描述有如下幾種:
基於 rust 官方倉庫 crates.io,經過版本說明來描述。
基於項目源碼的 git 倉庫地址,經過 URL 來描述。
基於本地項目的絕對路徑或相對路徑來描述。
[dependencies] rand = "0.3" time = "0.1.35" log = { version = "0.3" } regex = { git = "https://github.com/rust-lang-nursery/regex" } trust = { path = "cratex/trust" }
2-4 行就是第一種寫法,推薦使用這種寫法。對於一個軟件包沒有被髮布到 官方倉庫或者更傾向於使用 git 倉庫中最新的的源碼,可使用第 5 行的寫法,也就是第二種方法。第 6 行的寫法就是第三種方法,源碼位於本地,經常使用於調試軟件包。