rustup:管理多套 Rust 工具链
更新时间:2026-09-20。装好 Rust 后,
rustc/cargo本体往往是 rustup 管理的「代理」:rustup 决定当前目录到底用哪套工具链。Cargo 本身用法见 Cargo.toml 与依赖。
一、三个发布频道
| 频道 | 特点 | 适用 |
|---|---|---|
stable | 每 6 周一个稳定版,只有稳定特性 | 生产默认 |
beta | 将成为下个 stable 的候选 | 提前验证 |
nightly | 每夜构建,含未稳定特性(#![feature(...)]) | 用实验特性、嵌入式/部分异步生态 |
bash
rustup toolchain list # 已装的工具链
rustup show # 当前生效的是哪套、为什么(default/override)
rustup default stable # 设全局默认
rustup default nightly二、三个层级的版本选择(优先级)
rustup 解析当前目录工具链时,从高到低:
- 目录 override:
rustup override set nightly(写入 rustup 配置,绑定路径); - 项目清单文件
rust-toolchain.toml(提交进仓库,全队统一,推荐); - 全局 default。
bash
rustup override set nightly # 仅当前目录用 nightly
rustup override unset # 取消
rustup run 1.78 cargo build # 一次性指定版本运行
rustup which rustc # 看实际会调用哪个 rustc 的路径rust-toolchain.toml 示例(跨机器/CI 保证同一版本):
toml
[toolchain]
channel = "1.81.0"
components = ["rustfmt", "clippy", "rust-src"]
targets = ["wasm32-unknown-unknown"]三、component:按需装组件
工具链默认只带 rustc/cargo,常用组件要单独装(按工具链分别装):
bash
rustup component add clippy rustfmt # lint 与格式化(见 cargo test/clippy 篇)
rustup component add rust-src # 标准库源码,交叉编译/no_std 常用
rustup component add rust-analyzer # IDE 语言服务
rustup component list # 看有哪些可装/已装四、target:交叉编译
Rust 的「同一份代码编到不同目标三元组」靠 target:
bash
rustup target add wasm32-unknown-unknown # 加 WebAssembly 目标
rustup target add x86_64-unknown-linux-gnu
cargo build --target wasm32-unknown-unknown # 指定目标构建
rustup target list # 全部可用/已装目标加了 target 只提供 Rust 侧的核心/标准库预编译产物;要真正链接出可执行文件,往往还要对应平台的 linker 与 C 库(交叉 gcc、musl 等),这是交叉编译最常见的卡点。
五、更新与卸载
bash
rustup update # 更新 rustup 自身 + 所有已装频道
rustup update stable # 只更 stable
rustup self uninstall # 卸载整套
rustc --version; cargo --version # 确认当前版本六、rustup 和 cargo 的分工
- rustup 管「用哪套编译器和组件」:装、切、更新、target;
- cargo 管「具体项目怎么构建/测试/依赖」:build/test/run/add。
- 命令行敲
cargo/rustc时先走 rustup 的代理(shim),再转给当前生效工具链,所以同一项目在不同 override 下可能跑不同版本——这正是rustup show存在的意义。
总结
rustup 是 Rust 官方工具链管理器,维护 stable/beta/nightly 多套 rustc+cargo 与各平台 target;版本解析按「目录 override > 项目内 rust-toolchain.toml > 全局 default」优先级,团队统一版本推荐提交 rust-toolchain.toml,rustup show/which 用来确认实际生效版本;clippy/rustfmt/rust-src/rust-analyzer 需 component add,交叉编译先 target add(但还要自备对应 linker 与 C 库);记住 rustup 管「用哪套工具链」、cargo 管「怎么构建项目」,命令行的 cargo/rustc 其实是 rustup 转发的代理。