Rust使用Cargo

Cargo 是 Rust 的构建系统和包管理工具,Cargo 负责三个工作:构建你的代码,下载你代码依赖的库并便利这些库。最简单的 Rust 程序并没有任何依赖,但随着编写的程序更加复杂而不得不引入其他库,如果一开始就使用 Cargo的话,这将会简单许多。

如果是使用官方安装包的话,Rust 已经自带了 Cargo,也可以打开一个终端,输入:

$ cargo

如果可以看到 Usage 等信息,那一切 OK!

Hello world!

现在使用 Cargo 编写 Hello world 程序。打开一个终端,进入一个合适的目录,输入:

$ cargo new hello_world --bin

然后,可以看到:

Created binary (application) `hello_world` project

此时,已经在当前目录下创建了一个基于 Cargo 管理的项目,名为 hello_world。--bin 表示该项目将生成一个可执行文件。具体生成的项目目录结构如下:

.
├── Cargo.toml
└── src

└── main.rs
----

打开 main.rs 文件可以看到,cargo new 命令已经生成好了 hello_world 运行必须的代码:

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

然后进入到这个项目目录,输入:

$ cargo build

稍等片刻:

Compiling hello_world v0.1.0 (file:/youpath/hello_world)
    Finished debug [unoptimized + debuginfo] target(s) in 0.91 secs

那说明程序已经编译好了。接着:

$ cargo run
    Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target\debug\hello_world`
Hello, world!

OK!hello_world 已经运行并输出了。其实,这里也可以不用执行 cargo build 而直接 cargo run, rust 会为我们编译并运行程序:

& cargo run
   Compiling hello_world v0.1.0 (file:/yourpath/hello_world)
    Finished debug [unoptimized + debuginfo] target(s) in 0.35 secs
     Running `target\debug\hello_world.exe`
Hello, world!

基于 Cargo 项目组织结构

这是一个 基于 Cargo 的项目的结构图:

.
├── Cargo.toml
├── Cargo.lock
├── tests
├── examples
├── benches
├── target

├── debug
└── release

└── src

├── lib.rs
└── main.rs

Cargo.toml 和 Cargo.lock 位于项目的根目录下,是 Cargo 代码管理的核心,Cargo 工具的所有活动均基于这两个文件。

外部测试源码文件位于 tests 目录下。

示例程序源码文件位于 examples 目录下。

基准测试源码文件位于 benches 目录下。

target 目录下 debug 和 release 目录用于存放编译生成的中间文件和最终的可执行文件。

Cargo.toml 和 Cargo.lock

Cargo.toml 是 Cargo 特有的项目数据描述文件,存储了项目的所有信息,我们需要适当的修改这个文件让自己的 Rust 项目能够按照期望的方式进行构建、测试和运行。而 Cargo.lock 文件是 Cargo 工具根据同一项目下的 Cargo.toml 文件生成的项目依赖详细清单文件,不需要直接去修改这个文件,所以一般不用管他。

打开上面创建的 hello_world 项目的 Cargo.toml 文件:

[package]
name = "hello_world"
version = "0.1.0"
authors = ["dangcheng <[email protected]>"]

[dependencies]

Cargo.toml 文件是由诸如 [package] 或 [dependencies] 这样的段落组成,每一个段落又有多个字段组成,这些段落和字段描述了项目组织的基本信息。

package

[package] 段落描述了软件开发者对本项目的元数据描述信息。name 字段定义了项目的名称,version 字段定义了项目的当前版本,authors 字段定义了项目的作者。

dependencies

[deoendencies] 段落用于定义项目依赖。使用 Cargo 工具的最大优势就在于,能够对该项目进行方便、统一和灵活的管理。常用的依赖描述有以下几种:

基于 rust 官方仓库 crates.io,通过版本说明来描述。
基于项目源码的 git 仓库地址,通过 URL 来描述。
基于本地项目的绝对路径或相对路径来描述。

[dependencies]
rand = "0.3"
time = "0.1.35"
log = { version = "0.3" }
regex = { git = "https://github.com/rust-lang-nursery/regex" }
trust = { path = "cratex/trust" }

2-4 行就是第一种写法,推荐使用这种写法。对于一个软件包没有被发布到 官方仓库或者更倾向于使用 git 仓库中最新的的源码,可以使用第 5 行的写法,也就是第二种方法。第 6 行的写法就是第三种方法,源码位于本地,常用于调试软件包。

相关推荐