0x00 回顾
上一节,咱们了解了Rust,学会了编译hello world。这节课咱们来了解下Cargo构建工具。
0x01 认识Cargo
现在介绍另外一个Rust构建工具和包管理器。安装完成Rust环境之后,Cargo自然也就附带安装了。其实在实际的项目开发过程中,建议咱们都用Cargo来管理项目,方便维护。
首先先介绍下Cargo 的常用命令:
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 (https://github.com/toml-lang/toml)