Windows作業系統中的Rust程式,預設會使用MSVC來編譯的。但是如果Rust程式有使用到GNU相關的函式庫(例如GTK)時,就得搭配MinGW來編譯了。MSYS2是一套整合MinGW和POSIX環境的工具,可以在Windows作業系統上模擬出Linux作業系統的開發環境,且能利用MinGW直接編譯出在Windows作業系統上執行的程式。
安裝與設定MSYS2
參考這篇文章來安裝與設定MSYS2:
在Windows作業系統安裝Rust開發環境
如果您的Windows作業系統已經有Rust的開發環境(在命令提示字元下可以直接使用rustup
、cargo
等指令),可以跳過這個部份。
首先在MSYS2的終端機上執行以下指令來用rustup
安裝Rust的開發工具:
安裝檔可能會提示說需要微軟的Visual C++ Build Tools。這時選擇第三個選項不讓rustup
幫我們自動安裝這些微軟的東西。
選擇第二個選項來自訂Rust要如何安裝。
host triple的部份,輸入x86_64-pc-windows-gnu
,也就是我們的Rust編譯器預設使用的目標(target)名稱。
接著輸入Rust的版本,建議直接按下Enter使用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使用MSYS2的MinGW
當我們使用rustup
安裝x86_64-pc-windows-gnu
目標時,rustup
會替我們加上rust-mingw
這個元件,內有Rust自帶的MinGW工具鏈。若要替換成我們剛才使用MSYS2所安裝的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
目標來編譯程式時,就會去用MSYS2的MinGW提供的gcc.exe
和ar.exe
來做函式庫的連結。
Rust與MSYS2的Hello World
為了確定我們的Rust開發環境沒有問題,可以在MSYS2的終端機中,使用以下幾個指令來測試預設的Cargo程式專案(Hello World)是否可以正常被編譯執行。