文章目录


上一节安装好了 Rust 的开发环境。这节开始编写第一个程序,以及介绍

​Cargo​​的使用。


hello world

手动创建 hello_world 文件夹:

mkdir hello_world
cd hello_world

然后创建一个 hello_world.rs 文件,即 rust 源文件:

touch hello_world.rs

写入如下的代码:

fn main() {
println!("hello world");
}

Rust的缩进是 4 个空格而不是​​tab​

这里的​​println!​​​是宏,不是函数,函数没有​​!​

用 rustc(Rust Compile) 编译,然后运行可执行文件:

$ rustc hello_world.rs
$ ./hello_world
hello world

Rust是​​ahead-of-time​​(预)编译的语言,可以先编译程序,把可执行文件交给别人运行,而无需安装Rust。

rustc 使用于小项目,大项目还得用 cargo。

cargo

cargo 是 Rust 的构建系统和包管理工具。包括构建代码、下载依赖的库、构建这些库。

Rust 安装之后会默认安装 cargo,可通过以下方式查看:

$ cargo --version
cargo 1.58.0 (f01b232bc 2022-01-19)

查看帮助详情:

$ cargo -h

Rust的包管理器

USAGE:
cargo [+toolchain] [OPTIONS] [SUBCOMMAND]

OPTIONS:
-V, --version 打印版本信息并退出
--list 安装命令列表
--explain <CODE> 运行`rustc --explain CODE`
-v, --verbose 使用详细输出(-vv非常详细/输出)
-q, --quiet 不打印cargo日志信息
--color <WHEN> 着色: auto, always, never
--frozen 要求 Cargo.lock 和 cache 是最新的
--locked 要求 Cargo.lock 是最新的
--offline Run without accessing the network
--config <KEY=VALUE>... 覆盖配置值(不稳定)
-Z <FLAG>... Cargo的不稳定选项(仅限nightly),请参阅`cargo -Z help`了解详细信息
-h, --help 打印帮助信息

一些常见的 cargo 命令如下,​​cargo --list​​查看所有命令。

build, b    编译当前包
check, c 分析当前包并报告错误,但不构建对象文件
clean 删除target目录
doc, d 构建此包及其依赖项的文档
new 创建一个新的cargo包
init 在现有目录中创建一个新的cargo包
run, r 运行本地包的二进制文件或示例
test, t 运行测试
bench 运行基准测试
update 更新在Cargo.lock中列出的依赖项
search 搜索crates注册表
publish 打包并将此包上传到注册表
install 安装Rust二进制文件。默认位置是 $HOME/.cargo/bin
uninstall 卸载Rust二进制文件

有关特定命令的更多信息,请参见​​cargo help <command>​​。

cargo 创建项目

​cargo new​​​ 项目时,会自动初始化为 VCS 存储库,可以通过​​--vcs vcs​​​指定版本控制系统(git, hg, pijul,或 fossil),或者指定​​--vcs none​​​表示不初始化任何版本控制。如果不指定,默认为 git 或​​cargo-new.vcs​​配置值。

用 cargo 创建一个​​hello_cargo​​项目文件夹:

$ cargo new hello_cargo
Created binary (application) `hello_cargo` package

进入到​​hello_cargo​​目录,查看结构:

$ tree
.
├── .gitignore
├── Cargo.toml
└── src
└── main.rs

src 是源文件目录,里面有​​main.rs​​。

​.gitignore​​说明是一个 VCS 项目。

​Cargo.toml​​​是包管理文件。​​TOML​​​是​​Tom's Obvious, minimal Language​​(Tom 的显而易见的最小化语言)格式,是 Cargo 的配置格式。

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

​[package]​​​是区域标题,下方内容是用来配置包​​package​​的:

  • name: 项目名
  • version: 项目版本
  • authors: 项目作者
  • edition: 使用的 Rust 版本

​[dependencies]​​另一个区域的开始,下面会列出项目的依赖项。

在 Rust 里,代码的包(库)称为 crate

如果 vscode 中安装了 rust 插件:

从零学 Rust,第一个程序Hello World,以及包管理工具 Cargo 详解_rust

vscode 打开​​hello_cargo​​项目文件夹,会看到自动编译生成了 target 目录,正常情况不执行命令是不会产生的:

tree
.
tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
├── CACHEDIR.TAG
└── debug
├── build
├── deps
│ ├── 省略
├── examples
└── incremental
├── 省略

build 编译

​cargo build​​​会生成​​target/debug/{项目名}​​可执行文件。

还会在项目根目录下生成​​Cargo.lock​​文件,用于追踪项目依赖的库版本,不需要手动修改。

​cargo build --release​​ 优化编译,编译时间会变长。

可执行文件会生成在:​​target/release/{项目名}​

run 运行

​cargo run​​ 分为两步,编译 和 运行,第一次编译后,之后代码如果没发生改动,则 只会执行 run,不会重新 build。

​cargo run --release​​ 优化编译后运行。编译时间会变长,代码运行效率更快。

可执行文件会生成在:​​target/release/{项目名}​

check 检查

检查代码,确保能顺利编译,但不产生可执行文件。

cargo 的 check 和 build 有什么区别?

check 在速度上比 build 快很多。编码时可以反复 check,大大提高效率。

关注

微信公众号【我的小碗汤】,扫左侧码关注,了解更多咨询,更有免费资源供您学习