2.3 Hello,Cargo

原文地址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’学习。那些从动态语言学习可能会乐于其中。不同的人用不同的方式学习。用你觉得对的方法去学习。

你可能感兴趣的:(Rust)