107.04.24 rust 之路 03 Cargo

Cargo 是 Rust 的專案管理神器
它可以幫你產生專案、編譯專案、下載專案的相依套件
再搭配 crates.io (Rust 社群的 package registry) 根本超方便 OuO

cargo 我查字典是貨物,而 crate 是貨箱,恩....好像有什麼感覺又沒有 OuO
Photo by chuttersnap on Unsplash


不像寫 python 時,雖然可以用 pip install 安裝一堆套件
但是抖抖的
因為不知道怎麼給其他人使用,或是別人裝的版本可能不能運作
(一直講別的語言的壞話好像不可取
(總之,這是我自己的經驗,如果有更好的方式但是我不知道的話歡迎指正@@
<107.04.25 更新>
剛說完壞話之後就有人 來解答 OAO
python 有 wheel 檔,所謂造過的輪子不必重造....
滿滿的連結:Unofficial Windows Binaries for Python Extension Packages
也有人去對所有 python 的管理工具做大亂鬥:Python 包管理工具解惑

產生專案

專案有分成兩種:binary (可執行應用程式)、library (函式庫)
一般透過 flag (--bin、--lib) 控制
<注意> 在 1.25.0 版後預設從 --lib 改成 --bin
例如:產生叫做 hello 的可執行應用程式
$ cargo new hello --bin
也可以不加上 flag (1.25.0 後)
$ cargo new hello
有印出這個就代表成功了,這時候就會發現多了一個 hello 的資料夾
Created binary (application) `hello` project

檔案架構

hello/
    .git/
    .gitignore
    Cargo.toml
    src/
        main.rs
有沒有看到還很貼心的順便幫你用 git 版本控制 OuO

檔案內容

Cargo.toml:
TOML 是一種簡易設定檔格式,還可以針對不同套件進行版本選擇
Cargo 主要拿來記錄專案相依性,還有其他一堆功能 (e.g. 測試)
[package]
name = "hello"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]

[dependencies]

main.rs:
恩....就最原本的印出 Hello, World!
fn main() {
    println!("Hello, world!");
}

編譯專案

純粹 build (建置):

$ cargo build
$ cargo build --release # 釋出用
建置之後會產生 Cargo.lock 檔和 target 資料夾
Cargo.lock 是由 Cargo 維護,是記錄專案的實際資訊,不可手動更改
target 裡面有 debug 資料夾是因為預設使用除錯模式,但是檔案很多
若完成開發後要釋出時可以使用 --release 這會產生比較少的檔案,並且最佳化
hello/
    .git/
    .gitignore
    Cargo.lock
    Cargo.toml
    src/
        main.rs
    target/
        debug/    ← 裡面一堆東西
建置完後可以執行
$ ./target/debug/hello
$ ./target/release/hello # 釋出用

直接建置並執行:

$ cargo run

清空建置內容:

刪除 target 資料夾
$ cargo clean

下載專案的相依套件

就來簡單操作一下
以使用 text_io 這個套件為例
此套件提供跟 scanf() 相似的 macro,簡單來說就是鍵盤輸入
到 crates.io 搜尋 text_io,旁邊有一個按鈕可以複製 text_io = "0.1.7"
當然用手打也可以,不過直接複製比較保險 嗎 OuO

接著打開 Cargo.toml,並在 [dependencies] 下方貼上

接著看要不要先建置 (build) 都可以
使用 cargo build 它會自動下載並編譯

接著就來使用吧
打開 src/main.rs
內容改成:
#[macro_use] extern crate text_io;

fn main() {
    println!("Input name:");
    let name: String;
    scan!("{}\n", name);
    println!("Hello, {}!", name);
}

用 cargo run 編譯並執行


沒意外下一篇說個變數 QuQ

沒有留言:

張貼留言

^ Top