Windows作業系統中的Rust程式,預設會使用MSVC來編譯的。但是如果Rust程式有使用到GNU相關的函式庫(例如GTK)時,就得搭配MinGW來編譯了。MSYS2是一套整合MinGW和POSIX環境的工具,可以在Windows作業系統上模擬出Linux作業系統的開發環境,且能利用MinGW直接編譯出在Windows作業系統上執行的程式。
安裝與設定MSYS2
參考這篇文章來安裝與設定MSYS2:
在Windows作業系統安裝Rust開發環境
如果您的Windows作業系統已經有Rust的開發環境(在命令提示字元下可以直接使用rustup、cargo等指令),可以跳過這個部份。
首先在MSYS2的終端機上執行以下指令:
安裝程式可能會提示說需要微軟的Visual C++ Build Tools。不要理它,輸入「y」繼續。
選擇第二個選項來自訂Rust要如何安裝。
host triple的部份,輸入「x86_64-pc-windows-gnu」,也就是我們的Rust編譯器預設使用的目標(target)名稱。
接著輸入Rust的版本,建議使用「stable」,如果有nightly需求的話就用「nightly」吧!
接著設定是否要修改「PATH」環境變數,輸入「y」。
然後回到選單,選擇第一項,開始用我們剛才的設定來安裝Rust。
安裝好後,確認「PATH」環境變數是否有包含「%USERPROFILE%\.cargo\bin」路徑,沒有的話就加上去。
在MSYS2的終端機中設定Rust開發環境
在命令提示字元中輸入「rustup」和「cargo」指令來確認Windows作業系統的Rust開發環境是否安裝且設定成功。如果有設定成功,指令才會存在。
確認好Windows作業系統已經正確地弄好Rust開發環境後,可以在MSYS2的終端機中,再執行「rustup」和「cargo」指令。您可能會發現MSYS2的終端機並無法使用「rustup」和「cargo」指令。
此時可以在MSYS2的終端機中利用以下指令來查看「PATH」環境變數:
如果沒看到「PATH」環境變數中有包含「/c/Users/您的Windows使用者名稱/.cargo/bin」的話,我們就得按照以下方法自行加進去。
利用vim等文字編輯軟體,開啟MSYS2的終端機家目錄中的「.bashrc」檔案。如果目前的工作目錄已經是家目錄了,指令如下:
修改「.bashrc」的內容,將「/c/Users/您的Windows使用者名稱/.cargo/bin」加入至「PATH」環境變數中。如下圖:
存檔後,在MSYS2的終端機的家目錄中執行以下指令,來套用修改後的「PATH」環境變數。
之後就可以在MSYS2的終端機中使用「rustup」和「cargo」等Rust開發環境的相關指令了!
替Rust加入「x86_64-pc-windows-gnu」目標
如果您在安裝Rust的時候已經設定使用了「x86_64-pc-windows-gnu」目標,可以跳過這個部份。
在MSYS2的終端機中使用以下指令,來查看Rust開發環境目前已加入的目標:
如果沒有看到「x86_64-pc-windows-gnu」目標的話,可以使用以下指令來安裝:
讓Rust使用MinGW
在MSYS2的終端機中使用vim等文字編輯軟體,開啟「/c/Users/您的Windows使用者名稱/.cargo/config」檔案。
在檔案內加上以下內容:
[target.x86_64-pc-windows-gnu] linker = "C:\\msys64\\mingw64\\bin\\gcc.exe" ar = "C:\\msys64\\mingw64\\bin\\ar.exe"
如此一來,不論是哪個Cargo程式專案,在使用「x86_64-pc-windows-gnu」目標來編譯程式時,就會去用MinGW提供的「gcc.exe」和「ar.exe」來做函式庫的連結。
Rust與MSYS2的Hello World
為了確定我們的Rust開發環境沒有問題,可以在MSYS2的終端機中,使用以下幾個指令來測試預設的Cargo程式專案(Hello World)是否可以正常被編譯執行。