不用rustup,Windows下gnu版Rust安裝與開發環境配置

同勉共進發表於2022-02-25

寫在前面

本文介紹了在不使用rustup的情況下,在Windows上安裝gnu版的Rust,並配置開發環境(VSCode + rust-analyzer,CLion + IntelliJ Rust)的過程。Win10上親測有效。

預備知識:

  1. rustup:rustup 是Rust 的安裝和管理工具,感興趣的讀者可自行上網瞭解。
  2. “gnu版本的Rust”:Rust有工具鏈(toolchain)的概念,是指開發Rust應用程式所需的一系列元件或工具[1]。如果工具鏈中的gcc編譯器和ABI是微軟的,就是msvc版本;如果是GNU的,就是gnu版本[2]。

請您注意:

  1. 請不要輕易複製貼上本文中的命令,請保持仔細和小心,根據您的具體情況更改。
  2. 本文所提到的環境變數都是指系統環境變數,而不是使用者環境變數,請注意區分。
  3. 您的系統最好具備訪問外網的能力(非必須,但推薦),否則可能無法訪問下面的某些網站,也無法下載某些資源。
不用rustup,Windows下gnu版Rust安裝與開發環境配置
請新增到系統環境變數

正文

故事背景

現在網上幾乎所有的Windows安裝Rust的教程都是通過rustup安裝msvc版本,即便是有個別介紹安裝gnu版本的,也是通過rustup來安裝。但這不適合在下,第一,在下不想安裝Visual Studio C++ Build tools;第二,在利用rustup安裝gnu版本的Rust時,總是遇到如下報錯(報錯資訊經過了簡化):

could not rename component file from 'D:\aaa\xxx.dll' to 'D:\bbb\xxx.dll': 另一個程式正在使用此檔案,程式無法訪問。 (os error 32)

在下猜測出錯的原因可能是:rustup生成 D:\aaa\xxx.dll 後,該dll被在下電腦上的安全軟體掃描了,當rustup想將它移動到另一個位置時,發現檔案被佔用。問題無解的地方在於,在下沒有許可權關閉上述安全軟體。

於是在下開始了 install rust without rustup 的探索之旅。

步驟

一、安裝MinGW64

step1.這裡下載最新版的編譯好的mingw64,如winlibs-x86_64-posix-seh-gcc-12.0.1-snapshot20220123-mingw-w64-9.0.0-r1.7z,注意選擇帶x86_64字樣的下載。

不用rustup,Windows下gnu版Rust安裝與開發環境配置
下載MinGW64

step2. 下載後直接解壓,將得到的mingw64資料夾拷貝您感興趣的位置。

step3. 然後配置系統環境變數。比如mingw64資料夾的全路徑是 D:\software\mingw64,那就把 D:\software\mingw64\bin 新增到系統的PATH環境中。至於如何新增環境變數,請不會的讀者自行學習。對於一些容易的、沒有坑的步驟,本文不贅述,下同。

二、安裝gnu版Rust

step1.這裡下載安裝包,穩妥起見,下載stable版本。然後正常安裝就行,安裝過程會自動新增環境變數。可以自定義安裝位置,如 D:\software\Rust。

不用rustup,Windows下gnu版Rust安裝與開發環境配置
下載gnu版Rust

step2. 開啟CMD或PowerShell,執行 cargo -V 和 rustc -V ,如出現類似下面的輸出,證明成功。 

不用rustup,Windows下gnu版Rust安裝與開發環境配置
安裝成功截圖

三、安裝Rust原始碼

step1.這裡下載原始碼。假如,您想要把原始碼安裝在 D:\software 目錄下,就把下載好的原始碼移到這裡。

不用rustup,Windows下gnu版Rust安裝與開發環境配置
下載Rust原始碼

step2. 請確保您的系統上有可加壓.tar.gz的工具,如7-Zip

step3. 將解壓工具的可執行檔案的路徑(如 D:\software\7-Zip)新增到系統PATH環境變數。

step4. 以管理員身份(注意,這是必須的)開啟CMD或PowerShell,cd到原始碼所在目錄(如 D:\software),依次執行 7z x rustc-1.58.1-src.tar.gz和 7z x rustc-1.58.1-src.tar ,解壓後,可得到 rustc-1.58.1-src 資料夾。(注意:1. 如果您不是使用7-Zip作為解壓工具,請自行查詢您所用工具的解壓命令列;2. rustc-1.58.1-src.tar.gz 是下載的原始碼壓縮包,您下載的可能不是這個名字,對應的,解壓出的資料夾也不叫 rustc-1.58.1-src;3. 由於壓縮包比較大,解壓需要較長時間,請耐心等待) 

四、配置VSCode + rust-analyzer

step1. 安裝VSCode併為其安裝rust-analyzer,不會安裝VSCode的讀者請自行學習,然後用最簡單的方法安裝rust-analyzer就行,參考這裡。此時rust-analyzer多半還不能用,原因是找不到stdlib,請轉step2。如果由於網路原因您不能安裝rust-analyzer,請自行想辦法或轉step3.

step2. 新增系統環境變數 RUST_SRC_PATH,值為 D:\software\rustc-1.58.1-src\library(假設上一步您將原始碼安裝在D:\software下,且解壓後的原始碼資料夾名為rustc-1.58.1-src,請根據您的實際情況更改),如下圖。配置好環境變數後,重啟VSCode,應該就可以了。注意,您需要開啟一個rust專案,並耐心等待rust-analyzer載入成功,才能看到下圖所示結果。

不用rustup,Windows下gnu版Rust安裝與開發環境配置
新增系統環境變數RUST_SRC_PATH
不用rustup,Windows下gnu版Rust安裝與開發環境配置
rust-analyzer安裝成功截圖

step3. 如果您無法用step1的方法安裝rust-analyzer,可以編譯原始碼安裝。請確保您安裝了Node.js(後面會用到其中包含的npm,如果您正常安裝了Node.js,npm.exe對應的路徑已新增到系統PATH環境變數,如果沒有,請您手動新增),同時將 D:\software\VSCode 和 D:\software\VSCode\bin(這裡假設您的VSCode的安裝路徑是 D:\software\VSCode,請根據您的實際情況調整)新增到了系統PATH環境變數。

step4. 請開啟CMD或PowerShell(這次不必以管理員身份開啟),cd到 D:\software\rustc-1.58.1-src\src\tools\rust-analyzer(請根據您的Rust原始碼安裝位置調整相應的目錄),然後依次執行 cargo xtask install 和 cargo xtask install --server 。(編譯安裝參考了[3],只不過我們上一步安裝的Rust原始碼中已包含了rust-analyzer的原始碼,不用從github上下載了。編譯過程很長,大概20多分鐘,請您耐心等待)。

step5. 安裝完成後,請根據命令列視窗最後的輸出(如 warning: be sure to add `D:\software\Rust\.cargo\bin` to your PATH to be able to run the installed binaries)將對應的路徑新增到系統PATH環境變數。另外,不要忘了執行step2。

五、 配置CLion + IntelliJ Rust

step1. 下載安裝CLion,如果想免費用,請您自行想辦法。然後,開啟CLion, 依次點選File -> Settings -> Plugins,搜尋Rust,然後點選安裝。也可通過先下載外掛,再安裝的方法,請讀者自己學習如何操作。可以參考官網(如果您已能訪問外網但還是無法訪問該網站,請檢視您是否在hosts檔案中將jetbrains的相關網站遮蔽)。

step2. 依次點選File -> Settings -> Languages & Frameworks -> Rust,然後進行相關配置。條件所限,恕不能截圖,可參考下圖(圖片來源)。如果您的Rust安裝目錄是 D:\software\Rust,Rust原始碼安裝目錄是 D:\software\rustc-1.58.1-src,那麼,第一行配置(Toolchain location)就填 D:\software\Rust\bin,第二行配置(Standard library)就填 D:\software\rustc-1.58.1-src 或 D:\software\rustc-1.58.1-src\library(親測兩者都行)。

不用rustup,Windows下gnu版Rust安裝與開發環境配置
配置示意圖

step3. 利用CLion開啟Rust專案,耐心等待Rust外掛初始化成功。 

寫在後面

本文是在下的實踐經驗記錄,希望能幫到有同樣需求的讀者。由於在下才疏學淺、能力有限,錯誤疏漏之處在所難免,歡迎廣大讀者批評指正,您的批評是在下前進的不竭動力。

參考

[1] What exactly is a Rust "toolchain"? - Stack Overflow
[2] Difference between the gnu and msvc toolchains? : rust
[3] Windows下編譯安裝rust-analyzer並啟用VSCode擴充套件 - 知乎

相關文章