逐步解說:使用 WSL 2 和 Visual Studio 2022 建置和偵錯 C++
Visual Studio 2022 引進 Windows 子系統 Linux 版 2 (WSL 2) 開發的原生 C++ 工具組。 這個工具組現在可在 Visual Studio 2022 17.0 版或更高版本中使用。
WSL 2 是 Windows 子系統 Linux 版 (WSL 2) 的新建議版本。 它提供更好的 Linux 檔案系統效能、GUI 支援,以及完整的系統呼叫相容性。 Visual Studio 的 WSL 2 工具組可讓您使用 Visual Studio 在 WSL 2 發行版本上建置和偵錯 C++ 程式碼,而不需要新增 SSH 連線。 您可以使用 Visual Studio 2019 16.1 版中引進的原生 WSL 1 工具組,在 WSL 1 發行版本上建置和偵錯 C++ 程式碼。
Visual Studio 的 WSL 2 工具組同時支援 CMake 和 MSBuild 型 Linux 專案。 CMake 是使用 Visual Studio 進行所有 C++ 跨平台開發的建議。 我們建議 CMake,因為它會在 Windows、WSL 和遠端系統上建置和偵錯相同的專案。
如需本主題中資訊的影片簡報,請參閱影片:使用 WSL 2 發行版本和 Visual Studio 2022 對 C++ 進行偵錯。
WSL 2 工具組背景
Visual Studio 中的 C++ 跨平台支援假設所有來源檔案都源自 Windows 檔案系統。 以 WSL 2 發行版本為目標時,Visual Studio 會執行本機 rsync
命令,將檔案從 Windows 檔案系統複製到 WSL 檔案系統。 本機 rsync
複本不需要任何使用者介入。 當 Visual Studio 偵測到您使用 WSL 2 發行版本時,它會自動發生。 若要深入了解 WSL 1 與 WSL 2 之間的差異,請參閱比較 WSL 1 和 WSL 2。
Visual Studio 中的 CMake 預設整合支援 WSL 2 工具組。 若要深入了解,請參閱 Visual Studio 和 Visual Studio Code 中的 CMake 預設整合,以及在 Visual Studio 中使用 CMake 預設值進行設定和建置。 本文中還有更進階的資訊,請參閱進階 WSL 2 和 CMake 專案考量事項。
安裝建置工具
安裝在 WSL 2 上建置和偵錯所需的工具。 您將在稍後的步驟中使用 Visual Studio 的 CMake 二進位部署來安裝最新版的 CMake。
遵循安裝 WSL 的指示,以安裝 WSL 和 WSL 2 發行版本。
假設您的發行版本使用
apt
(本逐步解說使用 Ubuntu),請使用下列命令在 WSL 2 發行版本上安裝必要的建置工具:sudo apt update sudo apt install g++ gdb make ninja-build rsync zip
上述
apt
命令會安裝:- C++ 編譯器
gdb
CMake
rsync
zip
- 基礎建置系統產生器
使用 WSL 2 發行版本進行跨平台 CMake 開發
本逐步解說會在 Ubuntu 上使用 GCC 和 Ninja。 以及 Visual Studio 2022 17.0 版 Preview 2 或更新版本。
Visual Studio 會將 CMake 專案定義為具有專案根目錄 CMakeLists.txt
檔案的資料夾。 在本逐步解說中,您會使用 Visual Studio CMake 專案範本建立新的 CMake 專案:
從 Visual Studio [開始使用] 畫面,選取 [建立新專案]。
可用的選項包括:[複製存放庫]、[開啟專案或方案]、[開啟本機資料夾]、[建立新專案],或 [不使用程式碼繼續]。":::
在 [搜尋範本] 文字方塊中,輸入「cmake」。 選擇 [CMake 專案] 類型,然後選取 [下一步]。 提供專案的名稱和位置,然後選取 [建立]。
啟用 Visual Studio 的 CMake 預設整合。 選取 [工具]>[選項]>[CMake]>[一般]。 選取 [偏好使用 CMake 預設值進行設定、建置及測試],然後選取 [確定]。 相反地,您可以將
CMakePresets.json
檔案新增至專案的根目錄。 如需詳細資訊,請參閱啟用 CMake 預設整合。在 CMake 組態檔群組中,如果有的話,請使用 [CMake 預設],否則會呼叫並選取 [使用 CMakeSettings.json]。
若要啟用整合:從主功能表選取 [檔案]>[關閉資料夾]。 [開始使用] 頁面隨即出現。 在 [開啟最近的項目] 下,選取您剛關閉的資料夾以重新開啟資料夾。
Visual Studio 主功能表列有三個下拉式清單。 使用左側的下拉式清單來選取作用中的目標系統。 這是叫用 CMake 來設定和建置專案的系統。 Visual Studio 會使用
wsl -l -v
來查詢 WSL 安裝。 在下圖中,WSL2:Ubuntu-20.04 會顯示為目標系統。注意
如果 Visual Studio 開始自動設定專案,請閱讀步驟 11 來管理 CMake 二進位部署,然後繼續進行下列步驟。 若要自訂此行為,請參閱修改自動設定和快取通知。
使用中間的下拉式清單來選取作用中的 [設定預設]。 設定預設會告知 Visual Studio 如何叫用 CMake 並產生基礎建置系統。 在步驟 7 中,使用中的 [設定預設] 是 Visual Studio 所建立的 linux-default 預設。 若要建立自訂的 [設定預設],請選取 [管理組態...]。如需設定預設的詳細資訊,請參閱選取設定預設和編輯預設。
使用右側的下拉式清單來選取使用中的 [建置預設]。 [建置預設] 會告知 Visual Studio 如何叫用組建。 在步驟 7 的圖例中,使用中的建置預設是 Visual Studio 所建立的 Default 建置預設。 如需建置預設的詳細資訊,請參閱選取建置預設。
在 WSL 2 上設定專案。 如果專案產生未自動啟動,請使用 [專案]>[設定][專案名稱] 手動叫用設定
如果您的 WSL 2 發行版本上未安裝支援的 CMake 版本,則 Visual Studio 會在主功能表功能區下方提示您部署最新版的 CMake。 選取 [是],將 CMake 二進位檔部署到 WSL 2 發行版本。
系統會提示使用者是否要從 CMake 安裝最新的 CMake 二進位檔。 組織,因為未安裝支援的 CMake 版本。」
確認設定步驟已完成,而您可以在 [CMake] 窗格下的 [輸出] 視窗中看到 CMake 產生完成的訊息。 組建檔案會寫入 WSL 2 發行版本檔案系統中的目錄。
選取作用中的偵錯目標。 [偵錯] 下拉功能表會列出專案可用的所有 CMake 目標。
展開 [方案總管] 中的專案子資料夾。 在
CMakeProject.cpp
檔案中,在main()
中設定中斷點。 您也可以選取 [方案總管] 中的 [檢視選擇器] 按鈕,瀏覽至 CMake 目標檢視,如下列螢幕擷取畫面中的醒目提示:選取 [偵錯]>[開始],或按 F5。 您的專案會建置、可執行檔會在 WSL 2 發行版本上啟動,而 Visual Studio 會在中斷點停止執行。 您程式的輸出 (在此案例中為
"Hello CMake."
) 會顯示在 Linux 主控台視窗中:Visual Studio Linux 主控台視窗會顯示程序的輸出:「Hello CMake.」 編輯器視窗會顯示 hello world 程式。 執行停止於表示傳回 0;." 一行的中斷點
您現在已使用 WSL 2 和 Visual Studio 2022 建置和偵錯 C++ 應用程式。
進階 WSL 2 和 CMake 專案考量事項
Visual Studio 僅針對使用 CMakePresets.json
作為使用中組態檔的 CMake 專案,提供 WSL 2 的原生支援。 若要從 CMakeSettings.json
移轉至 CMakePresets.json
,請參閱在 Visual Studio 中啟用 CMake 預設整合。
如果您的目標是 WSL 2 發行版本,且不想使用 WSL 2 工具組,請在 CMakePresets.json
的 Visual Studio 遠端設定廠商對應中,將 forceWSL1Toolset 設定為 true。 如需詳細資訊,請參閱 Visual Studio 遠端設定廠商對應。
如果 forceWSL1Tooslet 設定為 true,則 Visual Studio 不會維護 WSL 檔案系統中來源檔案的複本。 相反地,它會存取已掛接 Windows 磁碟機中的來源檔案 (/mnt/
...)。
在大部分情況下,最好使用 WSL 2 工具組搭配 WSL 2 發行版本,因為當專案檔改為儲存在 Windows 檔案系統中時,WSL 2 的速度較慢。 若要深入了解 WSL 2 中的檔案系統效能,請參閱比較 WSL 1 和 WSL 2。
在 CMakePresets.json
的 Visual Studio 遠端設定廠商對應中,指定進階設定,例如 WSL 2 上複製專案的目錄路徑、複製來源選項和 rsync 命令引數。 如需詳細資訊,請參閱 Visual Studio 遠端設定廠商對應。
系統標頭仍會自動複製到 Windows 檔案系統,以提供原生 IntelliSense 體驗。 您可以在 CMakePresets.json
的 Visual Studio 遠端設定廠商對應中自訂包含或排除於此複本中的標頭。
您可以在 CMakePresets.json
的 Visual Studio 設定廠商對應中變更 IntelliSense 模式,或指定其他 IntelliSense 選項。 如需廠商對應的詳細資訊,請參閱 Visual Studio 遠端設定廠商對應。
WSL 2 和 MSBuild 型 Linux 專案
使用 Visual Studio 進行所有 C++ 跨平台開發時,建議使用 CMake,因為它可讓您在 Windows、WSL 和遠端系統上建置和偵錯相同的專案。
但是您可能有 MSBuild 型 Linux 專案。
如果您有以 MSBuild 型 Linux 專案,則可以升級至 Visual Studio 中的 WSL 2 工具組。 以滑鼠右鍵按一下方案總管中的專案,然後選擇 [屬性]>[一般]>[平台工具組]:
如果您要以 WSL 2 發行版本為目標,且不想使用 WSL 2 工具組,請在 [平台工具組] 下拉式清單中,選取 [Windows 子系統 Linux 版的 GCC] 或 [Windows 子系統 Linux 版的 Clang]。 如果選取其中一個工具組,Visual Studio 不會在 WSL 檔案系統中維護來源檔案的複本,而是會透過掛接的 Windows 磁碟機 (/mnt/
…) 存取來源檔案。 系統標頭仍會自動複製到 Windows 檔案系統,以提供原生 IntelliSense 體驗。 在 [屬性頁]>[一般] 中自訂包含或排除於此複本中的標頭。
在大部分情況下,最好使用 WSL 2 工具組搭配 WSL 2 發行版本,因為當專案檔儲存在 Windows 檔案系統中時,WSL 2 的速度較慢。 若要深入了解,請參閱比較 WSL 1 和 WSL 2。
另請參閱
影片:使用 WSL 2 發行版本和 Visual Studio 2022 對 C++ 進行偵錯
下載 Visual Studio 2022
在 Visual Studio 中建立 CMake Linux 專案
教學課程:在遠端 Windows 電腦上偵錯 CMake 專案