Cargo
Cargo 是 Rust 的构建系统和包管理工具,同时 Rustacean 们使用 Cargo 来管理它们的 Rust 项目。
Cargo 负责三个工作:构建你的代码,下载你代码依赖的库并编译这些库。我们把你代码需要的库叫做“依赖(dependencies)”因为你的代码依赖他们。
$ cargo --version
转换到 Cargo
- 创建源文件目录并移除旧的可执行文件
首先,回到你的终端,移动到你的hello_world目录,并输入如下命令:
$ mkdir src
$ mv main.rs src/main.rs # or 'move main.rs src/main.rs' on Windows
$ rm main # or 'del main.exe' on Windows
Cargo 期望源文件位于 src
目录,所以先做这个。
这样将项目顶级目录(在这里,是 hello_world)留给 README,license 信息和其他跟代码无关的文件。这样,Cargo 帮助你保持项目干净整洁。一切井井有条。
- 创建配置文件
下一步,在 hello_world 目录创建一个文件,叫做 Cargo.toml
。
这个文件使用 TOML(Tom’s Obvious, Minimal Language)格式。 TOML 类似于 INI,不过有一些额外的改进之处,并且被用作 Cargo 的配置文件。
输入如下内容
- Cargo.toml
[package]
name = "hello_world"
version = "0.0.1"
authors = [ "Your name <you@example.com>" ]
- 构建并运行 Cargo 项目
$ cargo build
Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
$ ./target/debug/hello_world
Hello, world!
你刚刚用 cargo build
构建了一个程序,
并用 ./target/debug/hello_world
运行了它,
不过你也可以用如下的一步操作 cargo run
来完成这两步操作:
$ cargo run
Running `target/debug/hello_world`
Hello, world!
注意这个例子并没有重新构建项目。 Cargo 发现文件并没有被修改,所以它只是运行了二进制文件。如果你修改了源文件,Cargo 会在运行前重新构建项目,这样你将看到像这样的输出:
$ cargo run
Compiling hello_world v0.0.1 (file:///home/yourname/projects/hello_world)
Running `target/debug/hello_world`
Hello, world!
Cargo 检查任何项目文件是否被修改,并且只会在你上次构建后修改了他们才重新构建。 对于简单的项目,Cargo 并不比使用rustc要好多少,不过将来它会变得有用。 这在你开始使用 crate 时显得尤为正确;(crate)在其他语言中有“库(library)”或“包(package)”这样的同义词。对于包含多个 crate 的项目,让 Cargo 来协调构建将会轻松很多。 有了 Cargo,你可以运行cargo build,而一切将有条不紊的运行。
- 发布构建
当你的项目准备好发布了,可以使用 cargo build --release
来优化编译项目。
这些优化可以让 Rust 代码运行的更快,不过启用他们会让程序花更长的时间编译。
这也是为何这是两种不同的配置,一个为了开发,另一个构建提供给用户的最终程序。
那个 Cargo.lock
是什么?
运行这个命令同时也会让 Cargo 创建一个叫做 Cargo.lock 的文件,它看起来像这样:
[root]
name = "hello_world"
version = "0.0.1"
Cargo 用Cargo.lock文件跟踪你程序的依赖。这里是 Hello World 项目的Cargo.lock文件。 这个项目并没有依赖,所以内容有一点稀少。 事实上,你自己甚至都不需要碰这个文件;仅仅让 Cargo 处理它就行了。
就是这样!如果你一路跟过来了,你应该已经成功使用 Cargo 构建了hello_world。 虽然这个项目很简单,现在它使用了很多在你余下的 Rust 生涯中将会用到的实际的工具。 事实上,你可以期望使用如下命令的变体开始所有的 Rust 项目:
$ git clone someurl.com/foo
$ cd foo
$ cargo build
创建新 Cargo 项目的简单方法
你并不需要每次都过一遍上面的操作来开始一个新的项目!Cargo 可以快速创建一个骨架项目目录这样你就可以立即开始开发了。
用 Cargo 来开始一个新项目,在命令行输入 cargo new
:
$ cargo new hello_world --bin
这个命令传递了 --bin
参数因为我们的目标是直接创建一个可执行程序,而不是一个库。
可执行文件通常叫做二进制文件(因为它们位于 /usr/bin
,如果你使用 Unix 系统的话)。
Cargo 为我们创建了两个文件和一个目录:
一个 Cargo.toml
和一个包含了 main.rs
文件的 src 目录。
这应该看起来很眼熟,他们正好是我们在之前手动创建的那样。
这些输出是你开始所需要的一切。
首先,打开Cargo.toml。它应该看起来像这样:
[package]
name = "hello_world"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
[dependencies]
Cargo 已经根据你给出的参数和git全局配置给出了合理的默认配置。你可能会注意到 Cargo 也把hello_world目录初始化为了一个git仓库。
这是应该写入 src/main.rs
的代码:
fn main() {
println!("Hello, world!");
}
中文文档
参考资料
https://github.com/KaiserY/rust-book-chinese