rust cargo使用

简介

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 "] // 作者

[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 表示是新建一个可执行文件。

参考

  • The Rust Programming Language
  • Rust 程序设计语言(第一版) 简体中文版

你可能感兴趣的:(rust)