Rust 工具链
在 Rust 中,工具链(toolchain)指的是编译器 rustc
、构建系统 cargo
、标准库以及其他相关工具的集合。通过官方的工具链管理器 rustup
,你可以轻松地安装、管理和切换不同版本和类型的 Rust 工具链。
以下是切换 Rust 工具链的几种主要方法,涵盖了从全局默认设置到项目特定配置的各种场景。
# 1. 查看已安装和当前活动的工具链
在进行切换之前,了解当前环境的状态非常有用。
查看已安装的工具链列表:
rustup toolchain list
这个命令会列出所有已安装的工具链,并在当前的默认工具链旁边标注 (default)
。输出
stable-x86_64-pc-windows-gnu
stable-x86_64-pc-windows-msvc (active, default)
2
可以看到当前默认的工具链是
MSVC
工具链,执行指令:rustup default stable-gnu
,将当前的默认工具链修改为GNU
(没有安装GNU
工具链也可以通过这条指令来安装)。
显示当前活动的工具链:
rustup show
此命令会显示当前目录活动的工具链。如果当前目录有特定的覆盖设置,这里会显示覆盖的工具链,否则会显示全局默认的工具链。
# 2. 安装新的工具链
在切换之前,你需要确保目标工具链已经被安装。rustup
支持多种工具链,主要包括:
- 稳定版 (stable): 最新的稳定发行版。
- 测试版 (beta): 下一个稳定版的预览。
- 每日构建版 (nightly): 包含最新功能和实验性特性的每日构建版本。
- 特定版本号: 如
1.65.0
。
安装最新的稳定版、测试版或每日构建版:
rustup toolchain install stable
rustup toolchain install beta
rustup toolchain install nightly
2
3
安装特定版本的工具链:
rustup toolchain install <version>
# 例如:
rustup toolchain install 1.65.0
2
3
你也可以指定目标平台:
rustup toolchain install stable-x86_64-unknown-linux-musl
# 3. 设置全局默认工具链
这是最常用的切换方式,它会改变系统中所有未使用特定覆盖规则的项目的默认编译器。
使用 rustup default
命令来设置全局默认工具链:
rustup default <toolchain>
示例:
切换到 nightly 版本:
rustup default nightly
1切换回 stable 版本:
rustup default stable
1切换到特定的历史版本:
rustup default 1.65.0
1
设置成功后,再次运行 rustup toolchain list
或 rustup show
,你会看到 (default)
标记已经移动到了新指定的工具链上。
# 4. 针对特定项目切换工具链(推荐的项目级配置)
在很多情况下,你可能希望为某个特定的项目指定一个工具链版本,而不是修改全局设置。这样做可以确保团队中的所有成员都使用相同的工具链版本来编译项目,从而保证可复现的构建。
这有两种主要方法:
# a) 使用 rust-toolchain
文件
这是最推荐的为项目指定工具链版本的方法。
- 在你的项目根目录下,创建一个名为
rust-toolchain
的文件。 - 在该文件中,写入你想要使用的工具链名称。
示例:
文件内容可以是:
nightly
或者一个特定的版本:
1.65.0
或者更详细的指定:
nightly-2022-11-20
当你在此目录下(或其任何子目录中)运行 cargo
或 rustc
命令时,rustup
会自动检测并使用 rust-toolchain
文件中指定的工具链。如果该工具链尚未安装,rustup
会自动为你下载并安装它。
# b) 使用 rustup override
命令
你也可以使用 override
命令为当前目录设置一个工具链。
rustup override set <toolchain>
示例:
进入你的项目目录,然后运行:
cd /path/to/my/project
rustup override set nightly
2
这会在 rustup
的配置中记录下这个目录应该使用 nightly
工具链。当你离开这个目录后,将恢复使用全局默认的工具链。
查看和取消目录覆盖:
- 查看所有已设置的覆盖:
rustup override list
- 取消当前目录的覆盖:
rustup override unset
rust-toolchain
文件与 rustup override
的区别:
rust-toolchain
文件可以被提交到版本控制系统(如 Git)中,方便团队协作。rustup override
是本地配置,不会影响其他开发者。
通常情况下,优先推荐使用 rust-toolchain
文件。
# 5. 临时单次命令切换
如果你只是想用某个特定的工具链临时运行一次命令(例如,测试代码在 nightly 版本下的表现),可以在命令前加上 +<toolchain>
。
cargo +<toolchain> [command]
示例:
使用 nightly 工具链来运行测试:
cargo +nightly test
1使用 beta 工具链来构建项目:
cargo +beta build
1使用特定版本来检查代码:
cargo +1.65.0 check
1
这种方式不会改变任何默认设置或目录覆盖,非常适合临时性的测试和实验。
# 总结
方法 | 命令/文件 | 作用范围 | 适用场景 |
---|---|---|---|
设置全局默认 | rustup default <toolchain> | 全局 | 改变系统主要的开发环境。 |
项目级配置 (推荐) | rust-toolchain 文件 | 项目目录及其子目录 | 保证项目构建环境的一致性,方便团队协作。 |
目录级覆盖 | rustup override set <toolchain> | 特定目录及其子目录 | 在本地为某个项目指定版本,不影响他人。 |
临时单次执行 | cargo +<toolchain> [command] | 单条命令 | 临时使用不同版本的工具链进行测试或构建。 |
通过灵活运用这些 rustup
提供的功能,你可以轻松地在不同的 Rust 工具链之间切换,以满足不同项目的开发需求。