RUST 学习日记 第2课 ——Cargo

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创建项目

咱们打开创建的项目,看下目录结构

目录结构

其目录结构,多出了一个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

直接运行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。没错,自动生成了文档。说起写文档应该是咱们最头痛的事情了。下图中红框标注的是项目目录,蓝框则是咱们项目中的方法。

doc文档

但是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。

1622971480148

0x03 toml文件

toml是rust的配置文件。咱们常见的配置文件有xmljsonyaml。在Rust中,则使用了toml作为该语言的配置文件,可以配置依赖的库,项目信息等等。咱们用记事本可以打开看下里面的内容。

toml文件

关于toml我就不多介绍了,文末我会推荐几篇文章,具体想了解的可以看下。下节预告——如何选择IDE?

0x04 其它资料

  • toml官方Github
  • toml中文翻译文档

0x05 本节源码

002 · StudyRust - 码云 - 开源中国 (gitee.com)

你可能感兴趣的:(RUST 学习日记 第2课 ——Cargo)