2.3.Hello, Cargo!

最后更新于:2022-04-01 00:42:48

# Hello, Cargo! [Cargo](http://crates.io/)是一个用来帮助Rustacean们管理Rust项目的工具。和Rust一样Cargo仍处于Alpha阶段,正在开发中。不过,对于许多Rust项目来说它已经足够用了,并且我们假设这些Rust项目将会从一开始就使用Cargo。 Cargo管理3个方面:构建你的代码,下载你代码所需的依赖和构建这些依赖。最开始,你的项目没有任何依赖,所以我们只使用它的第一部分机能。最终,我们会添加更多依赖。因为我们从一开始就使用Cargo,这将有利于我们后面添加依赖。 如果你通过官方安装器安装的Rust的话,你已经拥有了Cargo。如果你用的其它方式安装的Rust,你可能需要[查看Cargo README](https://github.com/rust-lang/cargo#installing-cargo-from-nightlies)获取特定的脚本安装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)部分指定。](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](https://github.com/toml-lang/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了。你可以在[这里](http://doc.crates.io/guide.html)获取一个更加深入的教程。 现在你学会了Cargo,让我们着手学习Rust语言吧。这是一些你使用Rust会一直用的到的基础。 (现在)你有两个选择:在“[学习Rust](http://kaisery.gitbooks.io/rust-book-chinese/content/content/3.Learn%20Rust%20%E5%AD%A6%E4%B9%A0Rust.md)”中深入一个项目,或者自底向上学习“[语法和语义](http://kaisery.gitbooks.io/rust-book-chinese/content/content/5.Syntax%20and%20Semantics%20%E8%AF%AD%E6%B3%95%E5%92%8C%E8%AF%AD%E4%B9%89.md)”,这样来自不同背景的同学可能会乐在其中。不同的人又不同的学习方式!选择最适合你的。
';