Rustc 编译器
Rustc 是 Rust 的官方编译器,负责将 Rust 源代码编译成可执行文件或库。了解 rustc 的使用方法对于深入理解 Rust 编译过程很有帮助。
基本用法
编译单个文件
# 编译 main.rs 生成可执行文件
rustc main.rs
# 在 Windows 上会生成 main.exe
# 在 Unix 系统上会生成 main
指定输出文件名
# 指定输出文件名
rustc main.rs -o my_program
# 指定输出目录
rustc main.rs --out-dir ./build/
编译选项
优化级别
# 无优化(默认,调试模式)
rustc main.rs
# 基本优化
rustc -O main.rs
# 或者
rustc --opt-level=1 main.rs
# 更多优化(发布模式)
rustc --opt-level=2 main.rs
# 最大优化(可能增加编译时间)
rustc --opt-level=3 main.rs
# 优化大小
rustc --opt-level=s main.rs # 优化大小
rustc --opt-level=z main.rs # 激进的大小优化
调试信息
# 包含调试信息
rustc -g main.rs
# 指定调试信息级别
rustc -C debuginfo=0 main.rs # 无调试信息
rustc -C debuginfo=1 main.rs # 仅行号表
rustc -C debuginfo=2 main.rs # 完整调试信息
目标平台
# 查看支持的目标平台
rustc --print target-list
# 为特定平台编译
rustc --target x86_64-pc-windows-gnu main.rs
rustc --target aarch64-unknown-linux-gnu main.rs
rustc --target wasm32-unknown-unknown main.rs
库的编译
编译静态库
# 编译为静态库 (.rlib)
rustc --crate-type=rlib lib.rs
# 编译为系统静态库 (.a 或 .lib)
rustc --crate-type=staticlib lib.rs
编译动态库
# 编译为动态库 (.so, .dll, .dylib)
rustc --crate-type=dylib lib.rs
# 编译为 C 兼容的动态库
rustc --crate-type=cdylib lib.rs
编译可执行文件
# 编译为可执行文件(默认)
rustc --crate-type=bin main.rs
代码生成选项
代码生成参数
# 设置代码生成参数
rustc -C opt-level=3 main.rs
rustc -C target-cpu=native main.rs
rustc -C target-feature=+avx2 main.rs
# 链接时优化 (LTO)
rustc -C lto main.rs
# 设置代码模型
rustc -C code-model=large main.rs
链接选项
# 静态链接
rustc -C prefer-dynamic=no main.rs
# 动态链接
rustc -C prefer-dynamic=yes main.rs
# 链接外部库
rustc -L /path/to/libs main.rs
rustc -l mylib main.rs
宏和属性
条件编译
# 设置配置标志
rustc --cfg feature="serde" main.rs
rustc --cfg debug_assertions main.rs
# 查看预定义的配置
rustc --print cfg
示例代码
// main.rs
#[cfg(feature = "serde")]
use serde::{Serialize, Deserialize};
fn main() {
#[cfg(debug_assertions)]
println!("Debug mode");
#[cfg(not(debug_assertions))]
println!("Release mode");
}
错误和警告
控制警告级别
# 禁止所有警告
rustc -A warnings main.rs
# 将警告视为错误
rustc -D warnings main.rs
# 禁止特定警告
rustc -A unused-variables main.rs
# 允许特定警告
rustc -W unused-variables main.rs
常用 lint 选项
# 禁止死代码警告
rustc -A dead_code main.rs
# 禁止未使用变量警告
rustc -A unused_variables main.rs
# 禁止未使用导入警告
rustc -A unused_imports main.rs
输出信息
查看编译信息
# 查看版本信息
rustc --version
rustc -V
# 查看详细版本信息
rustc --version --verbose
# 查看支持的目标
rustc --print target-list
# 查看默认目标
rustc --print target-spec-json
# 查看配置信息
rustc --print cfg
编译过程信息
# 显示详细编译过程
rustc -v main.rs
# 显示时间信息
rustc -Z time-passes main.rs
# 显示内存使用
rustc -Z print-fuel main.rs
高级选项
不稳定特性
# 启用不稳定特性(需要 nightly)
rustc -Z unstable-options main.rs
# 显示帮助信息(包括不稳定选项)
rustc -Z help
代码分析
# 生成 LLVM IR
rustc --emit=llvm-ir main.rs
# 生成汇编代码
rustc --emit=asm main.rs
# 生成多种输出
rustc --emit=asm,llvm-ir,obj main.rs
环境变量
常用环境变量
# 设置 Rust 源码路径
export RUST_SRC_PATH=/path/to/rust/src
# 设置链接器
export RUSTC_LINKER=clang
# 设置默认目标
export RUST_TARGET_PATH=/path/to/targets
实际应用示例
编译一个简单项目
# 项目结构
# src/
# main.rs
# lib.rs
# utils.rs
# 编译库
rustc --crate-type=rlib src/lib.rs
# 编译主程序(链接库)
rustc -L . --extern mylib=liblib.rlib src/main.rs
交叉编译示例
# 为 Windows 编译(在 Linux 上)
rustc --target x86_64-pc-windows-gnu \
-C linker=x86_64-w64-mingw32-gcc \
main.rs
# 为 ARM 编译
rustc --target aarch64-unknown-linux-gnu \
-C linker=aarch64-linux-gnu-gcc \
main.rs
性能优化
发布版本编译
# 发布版本的推荐设置
rustc -O \
-C target-cpu=native \
-C lto \
--cfg 'feature="release"' \
main.rs
大小优化
# 最小化二进制大小
rustc -C opt-level=z \
-C lto \
-C panic=abort \
-C strip=symbols \
main.rs
与 Cargo 的关系
虽然 rustc 是底层编译器,但在实际开发中,我们通常使用 Cargo 来管理项目:
# Cargo 实际上调用 rustc
cargo build --verbose # 可以看到 rustc 命令
# 传递参数给 rustc
cargo rustc -- -C opt-level=3
# 设置环境变量影响 rustc
RUSTFLAGS="-C target-cpu=native" cargo build
理解 rustc 的工作原理有助于:
- 调试编译问题
- 优化编译性能
- 理解 Cargo 的工作机制
- 进行高级配置和定制