2.3.Hello, Cargo!

Hello, Cargo!

Cargo是一个用来帮助Rustacean们管理Rust项目的工具。和Rust一样Cargo仍处于Alpha阶段,正在开发中。不过,对于许多Rust项目来说它已经足够用了,并且我们假设这些Rust项目将会从一开始就使用Cargo。

Cargo管理3个方面:构建你的代码,下载你代码所需的依赖和构建这些依赖。最开始,你的项目没有任何依赖,所以我们只使用它的第一部分机能。最终,我们会添加更多依赖。因为我们从一开始就使用Cargo,这将有利于我们后面添加依赖。

如果你通过官方安装器安装的Rust的话,你已经拥有了Cargo。如果你用的其它方式安装的Rust,你可能需要查看Cargo README获取特定的脚本安装Cargo。

转换到Cargo

让我们将Hello Wold项目转换到Cargo。

你需要做两件事来Cargo化我们的项目:创建一个Cargo.toml配置文件;将我们的源文件放到正确的地方。让我们先做移动文件那部分:

$ mkdir src
$ mv main.rs src/main.rs

注意因为我们创建了一个可执行文件,我们用了main.rs。如果我们想要创建一个库,我们应该使用lib.rs。入口点自定义的文件位置可以通过下面描述的TOML文件的[[lib]][[bin]]部分指定。](http://doc.crates.io/manifest.html#configuring-a-target)部分指定。)

Cargo期望你的源文件位于src目录下。这样将项目根目录留给像README,license信息和其它与代码无关的文件。Cargo帮助我们保持项目干净整洁。一切各得其所。

接下来,我们的配置文件

$ editor Cargo.toml

请确保文件名正确:你需要一个大写的C!

在配置文件中添加:

[package]

name = "hello_world"
version = "0.0.1"
authors = [ "Your name " ]

配置文件使用TOML格式。让我们向你解释一下:

TOML旨在作为一个最小化的配置文件格式,明确的语义,易于阅读。TOML被设计成可以无二义地映射到哈希表中。TOML应该能轻易解析成许多类型语言的数据类型。

TOML非常像INI文件,不过有一些其它优点。

一旦你设置好了配置文件,我们应该可以构建了!试试这些:

$ cargo build
   Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
$ ./target/hello_world
Hello, world!

OK!我们运行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项目。

$ git clone someurl.com/foo
$ cd foo
$ cargo build

一个新项目

你不需要每次创建项目时都把这些操作整个做一遍。Cargo能够生成一个你可以直接进行开发的骨架项目目录。

用Cargo开始一个新项目,运行cargo new

$ cargo new hello_world --bin

我们传递了一个--bin参数因为我们要构建一个二进制程序:如果你想创建一个库文件则不需要这个参数。

让我们看看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 "]

Cargo根据你传递的参数和git全局配置生成了合理的默认信息。你可能注意到了Cargo已经将hello_world目录初始化为了一个git仓库。

下面是src/main.rs的内容:

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

Cargo已经为我们生成了一个”Hello World!“,你可以进行coding了。你可以在这里获取一个更加深入的教程。

现在你学会了Cargo,让我们着手学习Rust语言吧。这是一些你使用Rust会一直用的到的基础。

(现在)你有两个选择:在“学习Rust”中深入一个项目,或者自底向上学习“语法和语义”,这样来自不同背景的同学可能会乐在其中。不同的人又不同的学习方式!选择最适合你的。

文章导航