Hello,Cargo!

2018-08-12 22:03 更新

Hello, Cargo!

Cargo 是 Rustaceans 用來(lái)幫助管理他們的 Rust 項(xiàng)目的一個(gè)工具。Cargo 目前處在 pre-1.0 狀態(tài),所以它仍然是一項(xiàng)正在進(jìn)行中的項(xiàng)目。然而,它已經(jīng)足夠用于許多 Rust 的項(xiàng)目,所以我們就假設(shè) Rust 項(xiàng)目從一開始就將使用 Cargo。

Cargo 管理三個(gè)方面的事情:構(gòu)建代碼,下載代碼所需要的依賴,構(gòu)建這些依賴項(xiàng)。前期階段,你的程序沒(méi)有任何的依賴,所以我們只使用其功能的第一部分。最終,我們會(huì)將添加更多依賴。從我們使用 Cargo 開始,添加依賴將會(huì)變得很容易。

如果你通過(guò)官方安裝程序安裝的 Rust,那么你也將擁有 Cargo。如果你用其他方法安裝的 Rust,你可能希望查看 Cargo 的自述,通過(guò)特定的指令來(lái)安裝它。

轉(zhuǎn)換成 Cargo

讓我們將 Hello World 轉(zhuǎn)換成 Cargo。

將我們的項(xiàng)目轉(zhuǎn)換成 Cargo,我們需要做兩件事情:創(chuàng)建一個(gè) Cargo.toml 配置文件,把我們的源文件放在正確的地方。讓我們先完成這部分:

    $ mkdir src
    $ mv main.rs src/main.rs

注意:因?yàn)槲覀儎?chuàng)建的是一個(gè)可執(zhí)行文件,所以我們使用的是 main.rs 文件。而如果我們想創(chuàng)建一個(gè)庫(kù)文件,我們應(yīng)該使用 lib.rs。自定義文件的位置入口點(diǎn)可以在下面描述的 TOML 文件中用 [[lib]] 或者 [[bin]] 關(guān)鍵字指定。

Cargo 期望你的源文件放在 src 目錄中。這與頂層的其他東西隔離開來(lái),比如 READMEs,許可證信息和其他任何與代碼無(wú)關(guān)的東西。Cargo 可以幫助我們保持項(xiàng)目的漂亮整潔。萬(wàn)物各得其所。

接下來(lái),編輯我們的配置文件:

    $ editor Cargo.toml

一定要確保這個(gè)名字是正確的:首字母 C 要大寫!

把下面的內(nèi)容輸入到文件里面:

    [package]

    name = "hello_world"
    version = "0.0.1"
    authors = [ "Your name <you@example.com>" ]

這個(gè)文件是 TOML 格式的。讓它向你來(lái)做個(gè)自我介紹吧:

    TOML 旨在成為一個(gè)最小的配置文件格式,由于明顯的語(yǔ)義的使用,使其容易閱讀。
    TOML 旨在明確的映射到一個(gè)哈希表。在各種各樣的語(yǔ)言中,TOML應(yīng)該易于解析成數(shù)據(jù)結(jié)構(gòu)。

TOML與 INI 非常類似,但比其有一些額外的優(yōu)點(diǎn)。

一旦你有了這個(gè)文件,我們應(yīng)該準(zhǔn)備構(gòu)建了!試試這個(gè):

    $ cargo build
       Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
    $ ./target/debug/hello_world
    Hello, world!

我們用 cargo build 構(gòu)建我們的項(xiàng)目,并且用 ./target/debug/hello_world 運(yùn)行它。我們可以用 cargo run 一步做到上面兩件事:

    $ cargo run
         Running `target/debug/hello_world`
    Hello, world!

請(qǐng)注意,這一次我們沒(méi)有重建項(xiàng)目。Cargo 指出我們沒(méi)有改變?cè)次募?,所以它只是運(yùn)行的二進(jìn)制文件。如果我們做了修改,我們會(huì)看到它的改變:

    $ cargo run
       Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
         Running `target/debug/hello_world`
    Hello, world!

這沒(méi)有簡(jiǎn)單的使用 rustc 來(lái)進(jìn)行整個(gè)過(guò)程。想想在將來(lái):當(dāng)我們的項(xiàng)目變得更加復(fù)雜時(shí),我們需要做更多的事情讓所有的部分正確編譯。如果利用 Cargo,隨著我們的項(xiàng)目增長(zhǎng),我們僅僅用 cargo build 即可,它就會(huì)以正確的方式運(yùn)行。

當(dāng)你的項(xiàng)目終于準(zhǔn)備發(fā)布了,你可以使用 cargo build --release 用最優(yōu)化的方式編譯你的項(xiàng)目。

你可能還會(huì)注意到,Cargo 已經(jīng)創(chuàng)建了一個(gè)新的文件: Cargo.lock。

    [root]
    name = "hello_world"
    version = "0.0.1"

Cargo 用這個(gè)文件跟蹤你應(yīng)用程序中的依賴關(guān)系?,F(xiàn)階段,我們沒(méi)有任何依賴,所以顯得有點(diǎn)稀疏。你從不需要編輯該文件,讓 Cargo 處理它就好了。

好了!我們已經(jīng)成功地利用 Cargo 構(gòu)建了 hello_world。盡管我們的程序很簡(jiǎn)單,但是我們開始使用的開拓未來(lái) Rust 事業(yè)的真正工具了。你可以期待利用如下所示的做法,開始幾乎所有的 Rust 項(xiàng)目:

    $ git clone someurl.com/foo
    $ cd foo
    $ cargo build

新建一個(gè)項(xiàng)目

每次當(dāng)你想開始一個(gè)新的項(xiàng)目時(shí),你不必經(jīng)歷整個(gè)過(guò)程!Cargo 有能力做一個(gè)基本的項(xiàng)目目錄,你可以在此基礎(chǔ)上馬上開始開發(fā)。

用 Cargo 開始一個(gè)新項(xiàng)目,使用命令 cargo new:

    $ cargo new hello_world --bin

我們傳遞了參數(shù) --bin,因?yàn)槲覀冋趧?chuàng)建一個(gè)二進(jìn)制程序:如果我們創(chuàng)建的是一個(gè)庫(kù)文件,就不要這個(gè)參數(shù)了。

讓我們看看 Cargo 為我們生成了什么:

    $ cd hello_world
    $ tree .
    .
    ├── Cargo.toml
    └── src
        └── main.rs

    1 directory, 2 files

如果你沒(méi)有 tree 命令,你可以從你的發(fā)行版的包管理器中獲取。它不是必需的,但是它確實(shí)有用。

這是開始我們需要的全部。首先,讓我們看看 Cargo.toml:

    [package]

    name = "hello_world"
    version = "0.0.1"
    authors = ["Your Name <you@example.com>"]

Cargo 基于你提供的參數(shù)作為合理的默認(rèn)值填充該文件,你可用 git 獲取全局配置。你可能會(huì)注意到,Cargo 也初始化 hello_world 目錄為一個(gè) git 倉(cāng)庫(kù)。

下面是 src/main.rs 里面的內(nèi)容:

    fn main() {
        println!("Hello, world!");
    }

Cargo 已經(jīng)為我們生成了一個(gè) “Hello World !“,你可以開始編碼了!Cargo 有自己的指南,它涵蓋 Cargo 許多更有深度的特性。

現(xiàn)在您已經(jīng)了解了工具,讓我們了解更多關(guān)于 Rust 語(yǔ)言本身的內(nèi)容。這些基礎(chǔ)知識(shí)將使你在剩下的時(shí)間里更好的理解 Rust。

你有兩個(gè)選擇:深入項(xiàng)目,進(jìn)入章節(jié)”學(xué)習(xí) Rust”,或者從基礎(chǔ)開始,學(xué)習(xí)“語(yǔ)法和語(yǔ)義”章節(jié)。更有經(jīng)驗(yàn)的系統(tǒng)程序員可能會(huì)更喜歡“學(xué)習(xí) Rust”,而擁有動(dòng)態(tài)語(yǔ)言背景的可能兩者皆可。不同的人有不同的學(xué)習(xí)方式!選擇適合你的。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)