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 其它资料

0x05 本节源码

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容