简介
Cargo 是 Rust 的构建系统和包管理工具。
主要负责三个工作:
- 构建
build
代码 - 下载你代码 依赖
dependencies
的包装箱crate
- 编译
你的源码
和包装箱crate
。
查看cargo是否被正确安装
cargo --version
项目的目录结构
要使用cargo工具,项目的目录结构需要如下组织:
project_name
|- src // 放置源文件的目录
|- main.rs / lib.rs // 源文件
|- Cargo.toml // Cargo的配置文件
Cargo.toml
toml
- 要使用cargo工具,必须在项目的根目录下建有其配置文件。
- TOML(Tom’s Obvious Minimal Language)格式。简单理解就是ini的进化版。
注意: Cargo.toml的C是大写
文件预览
Cargo.toml
[package] // 表明下面的语句用来配置一个包
name = "project_name" // 项目名
version = "0.0.1" // 版本
authors = ["Your name <you@example.com>"] // 作者
[dependencies] // 依赖 (如果有)
rand = “^0.3.0” // 依赖的外部包装箱,以及其需要版本
包装箱 crate
- 项目除了自己编写的源码外,还能依赖
dependencises
外部包装箱crate
以及其 所要求的版本。 - 包装箱
crate
是一个 Rust 代码的包。类似于其他语言的库library
或者package
。
包装箱的版本
Cargo理解语义化版本,它是一个编写版本号的标准。
- “^0.3.0” 代表”任何兼容0.3.0的版本”
- “0.3.0” 代表”^0.3.0的简写”
- “=0.3.0” 代表”只使用0.3.0的版本”
- 也可以指定版本范围
具体细节可以参考 cargo文档。
Cargo.lock
依赖”^0.3.0”获得了兼容的最新版本,如0.3.14。但过了一段时间后推出了兼容的0.3.15版本修复了0.3.14的bug的同时,却包含着破坏现有代码的回归缺陷(regression)。这可如何是好?
Cargo.lock 闪亮登场
当你第一次build项目时,Cargo 会查找所有符合你的 依赖dependencies
要求的版本,并记录到到 Cargo.lock
文件里。当你在未来再次
build 你的项目时,Cargo 会注意到 Cargo.lock 的存在,并接着使用 Cargo.lock 中指定的版本而不是再次去做 查明和记录版本
的工作。这让你有了一个可重复的自动构建。换句话说,项目会保持在依赖0.3.14的版本。直到我们显式的在 Cargo.toml 中升级。
文件预览
Cargo.lock
...
[[package]]
name = "libc"
version = "0.2.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rand"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
...
Cargo的构建(build)和运行(run)
在创建好项目的 目录结构
和 Cargo.toml
后,就可以使用cargo来构建和运行项目了。
构建 build
在 项目根目录
下输入 cargo build
就可构建项目(编译项目),
在 ./target/debug/project_name
中找到编译后的 可执行文件(exe)
运行。
cargo build
cargo build
默认是以 debug
方式编译,在项目 release
时,使用 --release
参数编译最终版本。
cargo build --release
运行 run
也可以在 项目根目录
下使用 cargo run
一个步骤来代替上述的 cargo build + run exe
两个步骤。
cargo run
Cargo的创建(new)
除了可以手动创建 目录结构
和 Cargo.toml
外,可以使用 Cargo new
来自动创建。在执行此命令的目录下创建名为project_name的目录,包含Cargo.toml,自动创建了 src/main.rs
。并且,还自动创建了git的仓库。
cargo new project_name --bin
其中 --bin
表示是新建一个可执行文件。