使用 Chocolatey 在 Win10 下配置 rust 开发环境
文章目录
简介
最近因学习rust
编程语言,需要在家中的 Win10 系统上安装rust
开发环境。
安装的目标是在vscode
中配合racer
实现代码提示功能。
因刚开始接触rust
对于rust
的不同channel
、toolchain
及racer
的情况都不太了解所以起了不少弯路,所以编写本文档记录下相关的过程。
主要参考了:
基础概念:
-
rustup
:是rust
官方推荐的rust
多版本维护工具。它的功能类似于Python
的Conda
或pyenv
这类工具。 -
cargo
:是rust
的构建工具。它的功能类似于Python
的pip
或Java
的Maven
等工具,既可以管理依赖也可以管理项目的构建。 -
racer
:是一个支持vscode
和emacs
等编译器的rust
代码自动完成的工具。 -
crate
:rust
中的程序库。
rust
的安装
rust
的版本选择
rust
在 Windows 上有多个版本可供选择,主要是因为rust
编译器目前还依赖于c
的链接工具,一些第三方的库在构建时依赖于c
工具链。早期的rust
版本主要使用mingw
来进行编译,这个版本被称为gnu
版,从官方文档来看,这个版本应该是包含了mingw
的一些工具,不需要安装额外的工具。另一个版本,也是官方推荐的版本是使用msvc
,它使用Visual Studio
进行构建,需要安装Visual Studio
,以便在编译程序时使用相关的编译构建工具。加上cpu
架构分i686
和x86_64
,这样版本选择就有了2*2=4
个,再算上rust
的三个版本通道stable
、beta
、nightly
,一共就有了12
个可供选择的版本。那么如何选择版本呢?官方更推荐使用msvc
版本,racer
的 github 上提示,从 2.1 版开始,它需要使用 nightly
版本才能编译。 我试了用stable
进行编译,会产生错误#![feature(rustc_private, box_syntax)]
,看错误信息是因为stable
不支持feature
这个函数(刚入门,不确定它是否是函数)。这样我就选择了nightly
通道上的msvc
版本。
根据选择的版本,我们需要安装以下程序:
-
rustup
-
msbuilder
及vcbuilder
-
cmake
rustup
及toolchain
的选择
我使用 chocolatey 管理 Windows 上的软件安装。
在chocolatey
网站上搜索rustup
是搜索不到的,因为它不是stable
软件。需要使用以下命令进行安装。
|
|
安装完rustup
之后,默认它会安装stable msvc
版的编译器及相关工具,我们需要切换至nightly msvc
。使用以下命令来安装nightly
版本,并将其设置为默认使用的版本。这里我还删除了stable
版本。
|
|
使用rustup
从官网下载的速度比较慢。也可以设置rustup
的镜像仓库以提高rustup
的下载速度。这个设置没有配置文件,只需要设置环境变量:
|
|
至此nightly msvc
版本的rust
编译器及其工具已经安装完毕。
编译工具链的安装
安装msbuild
、vctools
和cmake
安装完rust
的工具后,就已经可以编译rust
程序了。安装msbuild
和vctools
主要是因为在编译racer
及其它依赖于c/c++
编译器的程序库时需要它们。cmake
则是因为racer
的安装说明中提到编译racer
时依赖于cmake
。
使用以下命令可以完成编译工具链的安装
|
|
开始的时候我认为安装完microssoft-build-tools
就会包含vctools
,因为在msbuild 2015
中是包含了c/c++
工具链的。只安装microsoft-build-tools
就直接编译racer
会报找不到link.exe
的错误,查询chocolatey
上的包信息,可以看到microsoft-build-tools
在当前实际指向visualstudio2017buildtools这个包,这个包的说明中有明确的说明
|
|
它只包含了最小的依赖,如果需要使用vctools
需要安装额外的workload
,即visualstudio2017-workload-vctools
。
至此,编译racer
需要的工具都已经准备好了。
编译安装racer
按racer
官方文档只需要使用cargo +nightly install racer
即可编译安装了。但是我在编译时,遇到了几个问题。
设置crate
镜像仓库
在使用cargo
编译程序时会自动从crate
仓库下载程序的依赖,过程类似于maven
仓库或npm
仓库中下载依赖。默认的crate
仓库的访问速度非常慢,可以在%HOME%\.cargo\config
中添加以下内容,以切换至中科大的crate
镜像仓库:
|
|
设置PATH环境变量
上面安装的一系列工具都没有设置到PATH
中去,使用不方便,也会影响cargo
命令的执行。我使用cmder
,直接将对PATH
的修改放在了cmder
的设置中。相关内容如下:
|
|
主要添加了cargo
和msbuild
相关的目录。
开始编译
完成上述设置后,我开始使用cargo +nightly install racer
构建racer
,结果报错了:
|
|
从racer
和rust
的issue
中查到是构建工具的问题,那么问题有可能出在msbuild
或rust
的cmake
库,或者cmake
本身。在查couldn't determine visual studio generator
的时候还走了不少弯路,看到issue
上贴出的代码还以为是rust
和cmake
库不支持vs2017
,因为issue
上的这个错误,就是因为rust cmake
库上写死了vsbuild
的版本,从代码来看高于vs2015
的版本就不认了,有人也确实是使用vs2015
就没有报这个错误。
在查阅rust cmake
库的相关代码发现新版本已经是支持vs2017
的了,那问题就有可能是出在vsbuild
本身上了。
因为rust
官网对于安装vs
并没有明确,推荐的链接是安装完整的visual studio community
并包含c/c++
选项,而我安装的只是构建工具链。一开始我认为需要安装完整的visual studio
,后来才想起来vsbuild
和vctool
的 2017 版在使用前是需要设置环境变量的。
先在控制台中运行
|
|
会配置好相关的环境变量,之后再使用cargo +nightly install racer
进行构建和安装就没有问题了。
开发工具
编辑器集成
参照Rust 开发环境指北在vscode
中安装rust
相关插件,使用cargo
在rust
环境上安装相关的程序库和rust
源码,就可以实现代码提示功能,此处不再缀述。
调试器
可参照这篇文章进行配置。只需要在vscode
中安装C/C++
和Native Debug
这两个插件即可。
文章作者 Jamsa
上次更新 2018-07-29