Hello,Cargo!

2018-08-12 22:03 更新

Hello, Cargo!

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

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

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

轉(zhuǎn)換成 Cargo

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

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

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

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

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

接下來,編輯我們的配置文件:

    $ editor Cargo.toml

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

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

    [package]

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

這個文件是 TOML 格式的。讓它向你來做個自我介紹吧:

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

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

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

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

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

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

請注意,這一次我們沒有重建項目。Cargo 指出我們沒有改變源文件,所以它只是運行的二進(jìn)制文件。如果我們做了修改,我們會看到它的改變:

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

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

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

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

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

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

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

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

新建一個項目

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

用 Cargo 開始一個新項目,使用命令 cargo new:

    $ cargo new hello_world --bin

我們傳遞了參數(shù) --bin,因為我們正在創(chuàng)建一個二進(jìn)制程序:如果我們創(chuàng)建的是一個庫文件,就不要這個參數(shù)了。

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

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

    1 directory, 2 files

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

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

    [package]

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

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

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

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號