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”中深入一个项目,或者自底向上学习“语法和语义”,这样来自不同背景的同学可能会乐在其中。不同的人又不同的学习方式!选择最适合你的。