Rust使用Cargo

Cargo 是 Rust 的構建系統和包管理工具,Cargo 負責三個工做:構建你的代碼,下載你代碼依賴的庫並便利這些庫。最簡單的 Rust 程序並無任何依賴,但隨着編寫的程序更加複雜而不得不引入其餘庫,若是一開始就使用 Cargo的話,這將會簡單許多。git

若是是使用官方安裝包的話,Rust 已經自帶了 Cargo,也能夠打開一個終端,輸入:github

$ cargo

若是能夠看到 Usage 等信息,那一切 OK!app

Hello world!

如今使用 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 的項目的結構圖:

.
├── 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.lock

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

[package] 段落描述了軟件開發者對本項目的元數據描述信息。name 字段定義了項目的名稱,version 字段定義了項目的當前版本,authors 字段定義了項目的做者。

dependencies

[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 行的寫法就是第三種方法,源碼位於本地,經常使用於調試軟件包。

相關文章
相關標籤/搜索