前言
本文将讲解如何完成一个 Rust 项目的开发流程,从编写 “Hello, World!” 开始,到使用 Cargo 管理和运行项目。
编写 Hello world
开始一个新项目很简单,首先,创建一个包含 main.rs
文件的 hello_world
文件夹,并在 main.rs
文件中添加如下代码:
fn main() {println!("Hello, world!");
}
简单说明一下代码:
fn main() { ... }
:fn
关键字用于声明一个新的函数,这里声明了一个名为main
的函数。main
函数是项目的入口函数,每个可执行的 Rust 程序都必须包含一个main
函数。- 大括号
{}
包围着函数的主体内容。
println!("Hello, world!");
:- 这行代码调用了 Rust 的
println!
宏。 - 宏是 Rust 中一种特殊的、可用于生成代码的工具。
- 在这个场景中,
println!
宏用于向程序的标准输出打印一行字符串。 - 字符串
"Hello, world!"
被包括在双引号中,并在终端或命令行界面打印出来。 - 注意宏的末尾有一个感叹号
!
,这是 Rust 用于区分函数和宏的方法。
- 这行代码调用了 Rust 的
编译代码
通过 rustc
编译单个文件:
rustc main.rs
编译成功后,会生成一个同名的可执行文件:
通过 ./main
运行可执行文件,将在控制台看到 “Hello, world!”。
Cargo 项目
使用 rustc
直接编译是手动过程,主要用于编译单个 Rust 源文件,仅当项目很小且没有复杂依赖时适用。cargo
是 Rust 官方推荐的项目管理工具,它可以自动处理复杂的编译任务,包括依赖管理、编译、测试等,适用于任何规模的项目,并且提供了一致的项目结构和构建过程,所以,我们通常使用 Cargo 管理项目。
初始化项目
用以下命令创建一个标准的 Rust 项目结构:
cargo new hello_world
项目目录
hello_world/
.
├── .git
├── .gitignore
├── Cargo.toml # 描述项目的配置文件,包括项目信息和依赖信息
└── src└── main.rs # 项目代码的入口文件
编写代码
在 Rust 项目中,通常 main.rs
是的主入口文件。当创建一个可执行的 Rust 项目(也称为 binary crate)时,Cargo 默认会设置 main.rs
作为项目入口。main.rs
通常包含 main
函数,它是程序执行的入口。
我们打开 src/main.rs
文件,默认会有一段 “Hello world” 代码:
fn main() {println!("Hello, world!");
}
编译代码
当通过命令行运行 cargo build
命令来编译 Rust 项目时,Cargo 会执行一系列操作来编译你的代码,并生成编译结果。
cargo build
编译结束后,Cargo 会提供反馈,告知编译是否成功,以及相关信息。
编译成功
如果编译成功,通常会看到类似这样的输出:
这表示项目成功编译,没有出现错误。编译后的会生成可执行文件, 通常位于项目目录下的 target/debug/
目录中。例如本项目名称是 hello_world
,编译后的文件就叫做 hello_world
(在 Windows 上是 hello_world.exe
)。
target
├── CACHEDIR.TAG
└── debug├── build├── deps├── examples├── hello_world # 类 Unix 操作系统可执行文件├── hello_world.d└── incremental
运行编译文件
- 在类 Unix 系统中,直接通过命令行运行即可
- 在 windows 系统中,双击
hello_world.exe
运行即可
编译错误
如果源码有错误,cargo build
会中止编译过程,并显示错误信息。错误信息会标明出错的文件和行号,以及错误的类型和可能的解释。
在这个例子中,Rust 编译器告诉你 main.rs
文件的第 2 行有一个类型不匹配的错误。
编译警告
如果代码中存在一些潜在的隐患问题,编译器会输出警告信息,但不会中止编译。
这个警告告诉你有一个未使用的变量 x
。
运行代码
通过 cargo run
命令可以立即执行编译后的可执行文件,简化了 cargo build
与运行可执行文件这一流程。
结语
至此,一个简单的 ”Hello World“ 的示例已经讲解完成,本篇主要需要掌握的就是通过 Cargo 可以创建项目与运行项目。