河南重大項目建設網(wǎng)站網(wǎng)絡營銷成功的案例分析
cargo 提供了一系列的工具,從項目的建立、構(gòu)建到測試、運行直至部署,為 Rust 項目的管理提供盡可能完整的手段。不過,我們無需再手動安裝,之前安裝 Rust 的時候(用rustup或者vscode加插件的方式安裝),就已經(jīng)一并安裝了。
用cargo new來創(chuàng)建新的項目,該項目的結(jié)構(gòu)和配置文件都是由 cargo 生成,意味著我們的項目被 cargo 所管理
$ cargo new world_hello
$ cd world_hello
$ tree
.
├── .git
├── .gitignore
├── Cargo.toml
└── src
└── main.rs
Rust 項目主要分為兩個類型:bin 和 lib,前者是一個可運行的項目(默認),后者是一個依賴庫項目。
運行項目
有兩種方式可以運行項目:
cargo run
cargo run 首先對項目進行編譯,然后再運行,因此它實際上等同于運行了兩個指令
手動編譯和運行項目
cargo build
./target/debug/world_hello(debug 模式,在這種模式下,代碼的編譯速度會非???#xff0c;可是福兮禍所伏,運行速度就慢了. 原因是,在 debug 模式下,Rust 編譯器不會做任何的優(yōu)化,只為了盡快的編譯完成,讓你的開發(fā)流程更加順暢。)
cargo run --release 提高運行速度
cargo build --release
$ ./target/release/world_hello
Hello, world!
當項目大了后,cargo run 和 cargo build 不可避免的會變慢,那么有沒有更快的方式來驗證代碼的正確性呢?大殺器來了,接著!
cargo check 是我們在代碼開發(fā)過程中最常用的命令,它的作用很簡單:快速的檢查一下代碼能否編譯通過。因此該命令速度會非???#xff0c;能節(jié)省大量的編譯時間。
Cargo.toml 和 Cargo.lock 是 cargo 的核心文件,它的所有活動均基于此二者。
Cargo.toml 是 cargo 特有的項目數(shù)據(jù)描述文件。它存儲了項目的所有元配置信息,如果 Rust 開發(fā)者希望 Rust 項目能夠按照期望的方式進行構(gòu)建、測試和運行,那么,必須按照合理的方式構(gòu)建 Cargo.toml。
[package]
name = "world_hello"
version = "0.1.0"
edition = "2021"
Cargo.lock 文件是 cargo 工具根據(jù)同一項目的 toml 文件生成的項目依賴詳細清單,因此我們一般不用修改它,只需要對著 Cargo.toml 文件擼就行了。
依賴管理
使用 cargo 工具的最大優(yōu)勢就在于,能夠?qū)υ擁椖康母鞣N依賴項進行方便、統(tǒng)一和靈活的管理。
在 Cargo.toml 中,主要通過各種依賴段落來描述該項目的各種依賴項:
基于 Rust 官方倉庫 crates.io,通過版本說明來描述
基于項目源代碼的 git 倉庫地址,通過 URL 來描述
基于本地項目的絕對路徑或者相對路徑,通過類 Unix 模式的路徑來描述
這三種形式具體寫法如下:
[dependencies]
rand = "0.3"
hammer = { version = "0.5.0"}
color = { git = "https://github.com/bjz/color-rs" }
geometry = { path = "crates/geometry" }
crates.io它的默認鏡像地址是在國外,這就導致了某些時候難免會遇到下載緩慢或者卡住的情況
增加新的鏡像地址
首先是在 crates.io 之外添加新的注冊服務
[registries]
ustc = { index = “https://mirrors.ustc.edu.cn/crates.io-index/” }
Cargo.toml 中使用以下方式引入:
[dependencies]
time = { registry = “ustc” }
第二種方式,則不需要修改 Cargo.toml 文件,因為它是直接使用新注冊服務來替代默認的 crates.io。
在 $HOME/.cargo/config.toml 添加以下內(nèi)容:
[source.crates-io]
replace-with = ‘ustc’
[source.ustc]
registry = “git://mirrors.ustc.edu.cn/crates.io-index”