原文地址http://doc.rust-lang.org/book/hello-cargo.html
cargo是一个rust开发者用来管理他们项目的工具。Cargo当前稳定是pre-1.0版本,并且它仍在不断地进步中。但是它现在可以用来管理大多的rust项目,所以我们打算rust项目都用cargo工具作为开始。
cargo管理三样东西:建立你的代码,下载你代码依赖的东西并且建立依赖。首先,你的程序如果不需要任何依赖,我们将只能使用cargo的第一部分的功能。最终,如果我们往代码加更多的东西的话并且我们一开始就使用cargo,这将会是一件很简单的事情。
如果你通过官方安装器安装的话,你已经拥有cargo了。如果你通过其他的方式去去安装,你可能需要一些具体的指令去确认你是否已经正确的地安装。
转换成cargo
让我们把Hello World转换成Cargo吧。
将我们的项目转成cargo形式,我们只需要做两件事:建一个Cargo.toml的配置文件并把我们的源文件放在正确的地方。我们先来做第一件事:
$ mkdir src $ mv main.rs src/main.rs
注意,因为我们创建了一个可执行的文件,我们是通过使用main.rs文件。如果我们需要建立一个库文件,我们就应该使用lib.rs 。传统的入口文件路径按照toml定义的规范去写http://doc.crates.io/manifest.html#configuring-a-target
cargo希望你的源文件放在src文件目录里面。这可以使其他高层次的东西(如readme文档,许可信息和其他不相关的信息)远离你的代码。cargo可以帮助你保持我们对项目清晰整理,一个包含所有东西的地方,所有的东西只会在它该出现的地方出现。
下一步,我们的配置文件
$ editor Cargo.toml
必须确认输入的名字正确:这是基本的条件。。
将下面的东西输入进去:
[package] name = "hello_world" version = "0.0.1" authors = [ "Your name <[email protected]>" ]
这是toml的格式,下面来解析一下其内容
TOML目的是在于做一个能够清晰阅读并且可以少量配置的文件,这都源自于其简单语义。TOML被设计为一个简单哈希列表。TOML非常容易转换成其他通用语言的数据格式。
TOML与INI文件非常相似,但它带有其他一些额外的好处。
一旦把这个TOML文件建立起来,我们就可以随时准备去编译!尝试下这个:
$ cargo build Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world) $ ./target/debug/hello_world Hello, world!
Bam!我们通过cargo build编译了我们的项目,并且运行这个路径起来(./target/debug/hello_world).我们也可以一步到位,请使用cargo run:
$ cargo run Running `target/debug/hello_world` Hello, world!
注意到我们此次并没有重新编译项目。cargo已经提醒“你们并没有修改过源文件”,所以它仅仅只是运行原来的二进制程序。如果我们作了修改,我们会看到下列的场景:
$ cargo run Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world) Running `target/debug/hello_world`Hello, world!
这个操作并没有比原来我们使用rustc简化很多操作,但你试着想一下未来的情景:当我们的项目变得越来越复杂,我们需要做更多事情仅仅为了把所有的代码编译一边。但是通过cargo,随着项目发展,我们仅仅也只需要cargo build命令运行一边,然后它就自动帮你完成工作了。
当你的项目准备好发行,你可以使用cargo build --release的命令去编译你的项目(带优化功能)。
你也注意到cargo已经帮你创建了一个新的文件:Cargo.lock。
[root] name = "hello_world" version = "0.0.1"
这个文件是被cargo用作跟踪你程序的依赖的。现在我们的程序并没有多少依赖,所以这个文件显得比较稀疏。你不需要去接触这个文件,让Cargo去帮你处理就好了。
就这样,我们顺利通过cargo顺利地编译hello_world程序。尽管我们现在的程序非常简单,但是已经使用实际的工具,你可能会在将来rust编程中频繁的使用。
你可以期待所有的rust项目都使用cargo去开始项目的搭建:
$ git clone someurl.com/foo $ cd foo $ cargo build
一个新的项目
你并不用每次开始一个新的项目都完整地按照上述的流程!
Cargo可以在你开始开发项目的时候建立一个基本骨架项目目录格式。
通过cargo去建立一个新的项目,我们使用cargo new :
cargo new hello_world --bin
我们输入 --bin 选项是因为我们打算做个二进制的可执行文件:如果我们只是做一个library,我们可以忽略掉这个选项。
让我们看一下Cargo帮我们生成了什么:
$ cd hello_world $ tree . . ├── Cargo.toml └── src └── main.rs 1 directory, 2 files
如果你并没有tree这个命令,你也可以通过你的发行版的包管理器去查看。虽然这不是必须的,但是它看起来很实用。
这就是我们所用所需的内容了。首要的,我们检查一下Cargo.toml:
[package] name = "hello_world" version = "0.0.1" authors = ["Your Name <[email protected]>"]
Cargo根据你给的参数和你git全局配置,只能地给你toml文件填充默认值。你可能注意到了Cargo同时帮你初始化hello_world目录作为git仓库。
接着看一下src/main.rs这个文件里面有什么:
fn main() { println!("Hello, world!"); }
Cargo已经帮我们生成好一个“Hello World!”了,Cargo它有一个自己的文档,里面介绍了需要Cargo高级的特性。(http://doc.crates.io/guide.html)
现在我们把工具放下,真正地区学习Rust语言本身。那里有很多值得用你的余生去体会的。
你有两个选择:进入一个叫“Learn Rust”的项目学习,或者从基本的东西开始学习,通过根据自己的需求"Syntax and Semantics'里的内容。如果有这更多系统编程经验的程序员倾向于通过‘Learn Rust’学习。那些从动态语言学习可能会乐于其中。不同的人用不同的方式学习。用你觉得对的方法去学习。