两个典例
Hello, World
新建项目工程
mkdir hello_world
cd h*
code .
编写 Rust 程序
- 程序文件后缀名:
rs
- 文件命名规范:
hello_world.rs
- (例子)
fn main() {
println!("Hello,World!");
}
编译与运行
- 编译:
rustc main.rs
- 运行:
- Windows:
.\main.exe
- Linux/Mac:
./main
运行结果如下:
user@MacBook-Pro hello_world % mv hello_world.rs main.rs
user@MacBook-Pro hello_world % rustc main.rs
user@MacBook-Pro hello_world % ./main
Hello,World!
程序解剖
- 定义函数:
fn main() {}
- main 函数很特别:他是每个 Rust 可执行程序 最先运行的代码
- 打印文本:
println!("Hello,World!");
- Rust 的缩进是 4 个空格而不是 Tab
println!
是一个 Rust macro (宏)
"Hello,World!"
是字符串,他是 println!
的参数
- 这行代码以
;
结尾
编译和运行时单独的两步
- 运行 Rust 程序之前必须先编译,命令为:
rustc 源文件名
- 编译成功后,会生成一个二进制文件
- 在 Windows 上还会生成一个
.pdb
文件,里面包含调试信息
- Rust 是 ahead-of-time 编译的语言
- 可以先编译程序,然后把可执行文件交给别人运行(无需安装 Rust)
- rustc 只适合简单的 Rust 程序
Hello, Cargo
Cargo
- Cargo 是 Rust 的构建系统和包管理工具
- 安装 Rust 的时候会自动安装 Cargo
xinggongwuyue@DioxideCN-MacBook-Air hello_world % cargo --version
cargo 1.60.0 (d1fd9fe2c 2022-03-01)
使用 Cargo 创建项目
- 在项目目录中创建项目:
cargo new hello_cargo
- 项目名也是
hello_cargo
- 会创建一个新的目录
hello_cargo
- Cargo.toml
- src 目录
- 初始化了一个新的 Git 仓库,.gitignore
- 可以使用其他的 VCS:
cargo new program --vcs
Cargo.toml
- TOML(Tom’s Obvious, Minimal Language)格式,是 Cargo 的配置格式
- [package]:是一个区域标题,表示下方内容是用来配置包(package)的
- name:项目名
- version:项目版本
- authors:项目作者
- edition:使用的 Rust 版本
- [dependencies]:另一个区域的开始,它会列出项目的依赖项。
- 在 Rust 里面,代码的 包/库 称作
crate
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Dioxide <dioxide-cn@qq.com>"]
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
src/main.rs
- cargo 生成的 main.rs 在 src 目录下
- 而 Cargo.toml 在项目顶层下
- 源代码都应该在 src 目录下
- 顶层目录可以放置:README、许可信息、配置文件和其他与程序源码无关的文件
- 如果创建项目时没有使用 cargo,也可以把项目转化为使用 cargo:
- 把源代码文件移动到 src 下
- 创建 Cargo.toml 并填写相应的配置
构建 Cargo 项目
cargo build
- cargo build
- 创建可执行文件:
- Linux/Mac:
target/debug/hello_cargo
- Windows:
target\debug\hello_cargo.exe
- 运行可执行文件:
- Linux/Mac:
./target/debug/hello_cargo
- Windows:
.\target\debug\hello_cargo.exe
- 第一次运行
cargo build
会在顶层目录生成 cargo.lock 文件
- 该文件负责追踪项目依赖的精确版本
- 不需要手动修改该文件
运行 Cargo 项目
cargo run
- cargo run:编译代码 + 执行结果
- 如果之前编译成功过,且源码没有改变,那么就会直接运行二进制文件
xinggongwuyue@DioxideCN-MacBook-Air hello_cargo % cargo run
Compiling hello_cargo v0.1.0 (/Users/xinggongwuyue/Desktop/项目工程/rust/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.32s
Running `target/debug/hello_cargo`
Hello, world!
xinggongwuyue@DioxideCN-MacBook-Air hello_cargo % cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/hello_cargo`
Hello, world!
cargo check
- cargo check:检查代码,确保能通过编译,但是不产生任何可执行文件
- cargo check 要比 cargo build 快得多
- 编写代码的时候可以连续反复使用 cargo check 检查代码,提高效率。
为发布构建
- cargo build --release
- 编译时会进行优化
- 会在 target/release 而不是 target/debug 生成可执行文件
- 两种配置
- 一个开发
- 一个正式发布
评论区