RUST 学习日记 第2课 ——Cargo
0x00 回顾
上一节,咱们了解了Rust,学会了编译hello world。
0x01 认识Cargo
现在介绍另外一个Rust构建工具和包管理器。安装完成Rust环境之后,Cargo自然也就附带安装了。其实在实际的项目开发过程中,建议咱们都用Cargo来管理项目,方便维护。
首先先介绍下Cargo 的常用命令:
常用命令 | 解释 |
---|---|
cargo new | 新建一个项目 |
cargo build | 编译构建项目 |
cargo run | 编译运行项目 |
cargo doc | 创建项目的文档 |
cargo test | 测试项目 |
0x02 Cargo常用命令
新建项目
cargo new
+ 项目名称 : 创建一个项目
咱们找一个空文件夹,执行cargo new hello_rust
咱们打开创建的项目,看下目录结构
其目录结构,多出了一个Cargo.toml文件,那么这个文件是用来做什么的呢?咱们待会儿再介绍。
├─hello_rust
│ ├─Cargo.toml
│ ├─src
│ │ ├─main.rs
在src/main.rs
文件中,命令给咱们自动生成了hello world
的代码。
编译构建项目
需要进入Rust项目目录,执行cargo build
命令。咱们刚刚创建了hello_rust
项目,因此咱们先执行cd hello_rust
进入hello_rust
目录,再执行cargo build
命令。
命令执行结束后,咱们的项目目录,多出了target
目录,当前的目录结构如下:
├─hello_rust
│ ├─Cargo.lock
│ ├─Cargo.toml
│ ├─src
│ │ ├─main.rs
│ ├─target
│ │ ├─.rustc_info.json
│ │ ├─CACHEDIR.TAG
│ │ ├─debug
│ │ │ ├─.cargo-lock
│ │ │ ├─.fingerprint
│ │ │ │ ├─hello_rust-48ba2e065b74c352
│ │ │ │ │ ├─bin-hello_rust
│ │ │ │ │ ├─bin-hello_rust.json
│ │ │ │ │ ├─dep-bin-hello_rust
│ │ │ │ │ ├─invoked.timestamp
│ │ │ ├─build
│ │ │ ├─deps
│ │ │ │ ├─hello_rust.d
│ │ │ │ ├─hello_rust.exe
│ │ │ │ ├─hello_rust.pdb
│ │ │ ├─examples
│ │ │ ├─hello_rust.d
│ │ │ ├─hello_rust.exe
│ │ │ ├─hello_rust.pdb
│ │ │ ├─incremental
│ │ │ │ ├─hello_rust-2uvfimco9bni1
│ │ │ │ │ ├─s-fzaa2j599b-kngfhq-2b2uk2xznk0bm
│ │ │ │ │ │ ├─16ohm4271lofwczj.o
│ │ │ │ │ │ ├─1sx9bynqce00nts9.o
│ │ │ │ │ │ ├─2b2ua0pllx29qutz.o
│ │ │ │ │ │ ├─3eeqpquxpjwl9x0b.o
│ │ │ │ │ │ ├─4sazo1qpoqeg0t30.o
│ │ │ │ │ │ ├─5k8ackmjiop1ilj.o
│ │ │ │ │ │ ├─dep-graph.bin
│ │ │ │ │ │ ├─query-cache.bin
│ │ │ │ │ │ ├─work-products.bin
│ │ │ │ │ ├─s-fzaa2j599b-kngfhq.lock
在target/debug
目录下有个hello_rust.exe
,没错这就是咱们最终编译好的文件,这根咱们使用rustc
命令编译的结果是一致的,打开它就可以运行了。哈哈,是不是一闪而过,原因上节已经解释过了。
PS:项目准备发布时,可以执行cargo build -release
进行优化编译项目,运行这条命令后则会在target/release
目录生成一个可执行文件。
编译运行项目
需要进入Rust项目目录,执行cargo run
命令。咱们刚刚执行了,cargo build
,现在咱们执行cargon run
(如下图所示),执行时间0.06s,运行结果也打印了出来,运行的程序则是咱们上面所说的在target/debug
目录下有个hello_rust.exe
。
其实,cargo run
这条命令的功能是编译运行,如果项目没有编译,它则会先帮咱们编译,然后再运行结果。咱们这次做个测试,将目录下的target
文件夹删除,再次执行cargo run
。
在执行过程中,很明显感到会慢一些,此次执行时间是2.75s,从而得出一个结论:在创建项目后,执行过cargo build
后再执行cargo run
则会跳过编译过程,直接运行程序结果;否则,cargo run
会先执行编译过程,再运行程序。
创建文档
需要进入Rust项目目录,执行cargo doc
命令。咱们尝试执行一下,然后看下项目的目录结构。
├─hello_rust
│ ├─Cargo.lock
│ ├─Cargo.toml
│ ├─src
│ │ ├─main.rs
│ ├─target
│ │ ├─.rustc_info.json
│ │ ├─CACHEDIR.TAG
│ │ ├─debug
│ │ │ ├─.cargo-lock
│ │ │ ├─.fingerprint
│ │ │ │ ├─hello_rust-48ba2e065b74c352
│ │ │ │ │ ├─bin-hello_rust
│ │ │ │ │ ├─bin-hello_rust.json
│ │ │ │ │ ├─dep-bin-hello_rust
│ │ │ │ │ ├─doc-bin-hello_rust
│ │ │ │ │ ├─doc-bin-hello_rust.json
│ │ │ │ │ ├─invoked.timestamp
│ │ │ ├─build
│ │ │ ├─deps
│ │ │ │ ├─hello_rust.d
│ │ │ │ ├─hello_rust.exe
│ │ │ │ ├─hello_rust.pdb
│ │ │ ├─examples
│ │ │ ├─hello_rust.d
│ │ │ ├─hello_rust.exe
│ │ │ ├─hello_rust.pdb
│ │ │ ├─incremental
│ │ │ │ ├─hello_rust-2uvfimco9bni1
│ │ │ │ │ ├─s-fzalohxenn-ikyc86-2b2uk2xznk0bm
│ │ │ │ │ │ ├─16ohm4271lofwczj.o
│ │ │ │ │ │ ├─1sx9bynqce00nts9.o
│ │ │ │ │ │ ├─2b2ua0pllx29qutz.o
│ │ │ │ │ │ ├─3eeqpquxpjwl9x0b.o
│ │ │ │ │ │ ├─4sazo1qpoqeg0t30.o
│ │ │ │ │ │ ├─5k8ackmjiop1ilj.o
│ │ │ │ │ │ ├─dep-graph.bin
│ │ │ │ │ │ ├─query-cache.bin
│ │ │ │ │ │ ├─work-products.bin
│ │ │ │ │ ├─s-fzalohxenn-ikyc86.lock
│ │ ├─doc
│ │ │ ├─.lock
│ │ │ ├─brush.svg
│ │ │ ├─COPYRIGHT.txt
│ │ │ ├─dark.css
│ │ │ ├─down-arrow.svg
│ │ │ ├─favicon.ico
│ │ │ ├─FiraSans-LICENSE.txt
│ │ │ ├─FiraSans-Medium.woff
│ │ │ ├─FiraSans-Regular.woff
│ │ │ ├─hello_rust
│ │ │ │ ├─all.html
│ │ │ │ ├─fn.main.html
│ │ │ │ ├─index.html
│ │ │ │ ├─sidebar-items.js
│ │ │ ├─LICENSE-APACHE.txt
│ │ │ ├─LICENSE-MIT.txt
│ │ │ ├─light.css
│ │ │ ├─main.js
│ │ │ ├─normalize.css
│ │ │ ├─noscript.css
│ │ │ ├─rust-logo.png
│ │ │ ├─rustdoc.css
│ │ │ ├─search-index.js
│ │ │ ├─settings.css
│ │ │ ├─settings.html
│ │ │ ├─settings.js
│ │ │ ├─source-files.js
│ │ │ ├─source-script.js
│ │ │ ├─SourceCodePro-LICENSE.txt
│ │ │ ├─SourceCodePro-Regular.woff
│ │ │ ├─SourceCodePro-Semibold.woff
│ │ │ ├─SourceSerifPro-Bold.ttf.woff
│ │ │ ├─SourceSerifPro-It.ttf.woff
│ │ │ ├─SourceSerifPro-LICENSE.md
│ │ │ ├─SourceSerifPro-Regular.ttf.woff
│ │ │ ├─src
│ │ │ │ ├─hello_rust
│ │ │ │ │ ├─main.rs.html
│ │ │ ├─storage.js
│ │ │ ├─theme.js
│ │ │ ├─wheel.svg
项目目录多出了doc
目录,咱们打开doc/─hello_rust/index.html
。没错,自动生成了文档。说起写文档应该是咱们最头痛的事情了。下图中红框标注的是项目目录,蓝框则是咱们项目中的方法。
但是main
方法没有任何注释,我在main.rs
中随便加一点注释。
PS:关于“文档注释”,会在后面的章节详细介绍,这里了解即可。
/// 我是文档注释,下面的方法会打印 “hello world”。
fn main() {
println!("Hello, world!");
}
咱们再次执行cargo doc
命令,打开doc/─hello_rust/index.html
,看下结果。页面中已经增加了咱们刚刚写的注释内容了。
PS:写代码时多写注释,可以方便其它人维护代码哟~
测试项目
需要进入Rust项目目录,执行cargo test
命令。这条指令很简单,测试下在咱们写的程序。test result :ok。
0x03 toml文件
toml
是rust的配置文件。咱们常见的配置文件有xml
,json
,yaml
。在Rust中,则使用了toml作为该语言的配置文件,可以配置依赖的库,项目信息等等。咱们用记事本可以打开看下里面的内容。
关于toml
我就不多介绍了,文末我会推荐几篇文章,具体想了解的可以看下。下节预告——如何选择IDE?
0x04 其它资料
- toml官方Github
- toml中文翻译文档
0x05 本节源码
002 · StudyRust - 码云 - 开源中国 (gitee.com)