Page 20
Cargo是Rust程序员们用来帮助管理Rust程序的工具.Cargo现在是1.0以前的版本,所以它还在完善中.然而,它已经足够好用了,所以我们还是建议从开始就使用Cargo来管理Rust程序.
Cargo管理了3件事:编译代码,下载代码中的依赖项,编译这些依赖项.开始的时候,你的代码没有任何依赖项,所以我们仅仅只使用它第一部分的功能.必要的时候,我们会添加更多依赖项.因为我们开始就使用了Cargo,以后会很容易的添加依赖项.
如果你使用了官方安装包安装Rust的,你就会自动安装Cargo.如果你通过其他方式安装Rust,你可以参考Cargo的README中的指导来安装Cargo.
转到Cargo
让我们把Hello World转到Cargo管理.
把一个工程Cargo化,我们需要做两件事:创建一个Cargo.toml配置文件,然后把原文件放在正确的地方.我们来做这些事情:
$ mkdir src
$ mv main.rs src/main.rs
因为我们正在创建一个可执行程序,我们要使用main.rs.如果我们要创建一个库文件,我们需要使用lib.rs.定制化文件位置的入口点可以通过TOML文件中的[[lib]]或者[[bin]]关键字指定.
Cargo希望我们把源文件放在src目录下.这样可以把其他文件例如READMEs,许可证,和其他与代码无关的文件放在顶层目录.Cargo会帮我们保持工程的整洁和完好.一个存放所有文件的地方会保持所有文件在它们合适的地方.
下面是我们的配置文件:
$ editor Cargo.toml
请确保名字的正确性:首字母C大写!
文件中输入这些:
[package]
name= "hello_world"
version = "0.0.1"
authors = [ "Your name <you@example.com>" ]
Page 21
这个文件使用的是TOML格式.我们来解释一下:
TOML文件的目标是用最小的格式文件这样可以易于处理语法.TOML会映射到一个hash table.TOML文件可以将多种语言转换成数据结构.
TOML文件和INI很像,但是有更好的特点.
一旦你将这个文件放在正确的位置,我们可以准备编译了!
这样做:
duang!我们用cargo编译了我们的程序,然后运行它 ./target/debug/hello_world.
我们可以用cargo run来同时做这两件事.
这并没有比使用rustc给我们带来更多的东西,但是想想以后:当我们的工程越来越复杂,我们需要保持多有代码都能正确的被编译.通过Cargo,我们可以用cargo build来正确编译复杂的代码.
当我们的代码最终准备好发布,你可以使用cargo build --release来编译你的工程,这会带来一些优化选项.
同时你还会注意到Cargo创建了一个新文件:Cargo.lock
[root]
name = "hello_world"
version = "0.0.1"
Page 22
Cargo使用这个文件来记录你的代码中依赖项.现在我们还没有依赖项,所以他现在没什么用.你以后不用自己修改这个文件,留给Cargo来处理这个文件.
好了!我们成功的用Cargo编译了hello_world文件.尽管程序很简单,在你的Rust生涯中你可以试用这个工具.你可以用这个工具来开发真正的Rust程序:
$ git clone someurl.com/foo
$ cd foo
$ cargo build
一个新的工程
你不必每次创建新工程的时候都亲自创建每个文件!Cargo可以为你创建一个新工程的骨架,这样你就可以正确的开始开发代码.
开始创建一个新的工程,使用cargo new:
$ cargo new hello_world --bin
我们传递了--bin参数,是因为我们要生成一个二进制程序:如果我们创建一个库文件,我们就不要这个参数.
Cargo会为我们创建这些:
如果你没有tree命令,你可以从你的系统包管理器找到它.这不是必须的,但是很有用.
开始的时候我们知道这些就够了.现在我们来分析一下Cargo.toml文件:
Page 23
Cargo使用了一些合理的默认项来生成这个文件,这些来源于你的git全局配置.你会发现Cargo已经为你初始化好了hello_world目录的git版本库.
src/main.rs文件的内容如下:
Cargo为我们创建了一个"Hello World!"程序,你可以直接开始写你的代码了!Cargo有他自己的帮助文档,里面深度介绍了Cargo的更多特性.
现在你已经准备好了你的工具,让我们开始学习更多Rust语言的知识.
你现在有两个选择:从第三章开始深入一个工程,或者从第五章开始学习最基本的Rust语法.更有经验的开发者可能倾向于第三章,而那些有动态语言开发背景的人两者皆可.不同的人有不同的习惯,选择你喜欢的.