逐步解說:使用 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。

  1. 遵循安裝 WSL 的指示,以安裝 WSL 和 WSL 2 發行版本。

  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 專案:

  1. 從 Visual Studio [開始使用] 畫面,選取 [建立新專案]

    Visual Studio 2022 [開始使用] 對話方塊的螢幕擷取畫面。 可用的選項包括:[複製存放庫]、[開啟專案或方案]、[開啟本機資料夾]、[建立新專案],或 [不使用程式碼繼續]。":::

  2. 在 [搜尋範本] 文字方塊中,輸入「cmake」。 選擇 [CMake 專案] 類型,然後選取 [下一步]。 提供專案的名稱和位置,然後選取 [建立]

  3. 啟用 Visual Studio 的 CMake 預設整合。 選取 [工具]>[選項]>[CMake]>[一般]。 選取 [偏好使用 CMake 預設值進行設定、建置及測試],然後選取 [確定]。 相反地,您可以將 CMakePresets.json 檔案新增至專案的根目錄。 如需詳細資訊,請參閱啟用 CMake 預設整合

    Visual Studio 專案選項的螢幕擷取畫面。已選取 [Cmake] > [一般]。

    在 CMake 組態檔群組中,如果有的話,請使用 [CMake 預設],否則會呼叫並選取 [使用 CMakeSettings.json]。

  4. 若要啟用整合:從主功能表選取 [檔案]>[關閉資料夾]。 [開始使用] 頁面隨即出現。 在 [開啟最近的項目] 下,選取您剛關閉的資料夾以重新開啟資料夾。

  5. Visual Studio 主功能表列有三個下拉式清單。 使用左側的下拉式清單來選取作用中的目標系統。 這是叫用 CMake 來設定和建置專案的系統。 Visual Studio 會使用 wsl -l -v 來查詢 WSL 安裝。 在下圖中,WSL2:Ubuntu-20.04 會顯示為目標系統

    Visual Studio 目標系統下拉式清單的螢幕擷取畫面。WSL2:已選取 Ubuntu-20.04。

    注意

    如果 Visual Studio 開始自動設定專案,請閱讀步驟 11 來管理 CMake 二進位部署,然後繼續進行下列步驟。 若要自訂此行為,請參閱修改自動設定和快取通知

  6. 使用中間的下拉式清單來選取作用中的 [設定預設]。 設定預設會告知 Visual Studio 如何叫用 CMake 並產生基礎建置系統。 在步驟 7 中,使用中的 [設定預設] 是 Visual Studio 所建立的 linux-default 預設。 若要建立自訂的 [設定預設],請選取 [管理組態...]。如需設定預設的詳細資訊,請參閱選取設定預設編輯預設

    Visual Studio 使用中設定預設下拉式清單的螢幕擷取畫面。已選取 [管理組態...]。

  7. 使用右側的下拉式清單來選取使用中的 [建置預設]。 [建置預設] 會告知 Visual Studio 如何叫用組建。 在步驟 7 的圖例中,使用中的建置預設是 Visual Studio 所建立的 Default 建置預設。 如需建置預設的詳細資訊,請參閱選取建置預設

  8. 在 WSL 2 上設定專案。 如果專案產生未自動啟動,請使用 [專案]>[設定][專案名稱] 手動叫用設定

    Visual Studio 專案設定下拉式清單的螢幕擷取畫面。已選取 [設定 CMakeProject]。

  9. 如果您的 WSL 2 發行版本上未安裝支援的 CMake 版本,則 Visual Studio 會在主功能表功能區下方提示您部署最新版的 CMake。 選取 [是],將 CMake 二進位檔部署到 WSL 2 發行版本。

    Visual Studio 工具列下方提示的螢幕擷取畫面

    系統會提示使用者是否要從 CMake 安裝最新的 CMake 二進位檔。 組織,因為未安裝支援的 CMake 版本。」

  10. 確認設定步驟已完成,而您可以在 [CMake] 窗格下的 [輸出] 視窗中看到 CMake 產生完成的訊息。 組建檔案會寫入 WSL 2 發行版本檔案系統中的目錄。

    Visual Studio [輸出] 視窗的螢幕擷取畫面。其中包含在設定步驟期間產生的訊息,包括 CMake 產生已完成。

  11. 選取作用中的偵錯目標。 [偵錯] 下拉功能表會列出專案可用的所有 CMake 目標。

    Visual Studio [偵錯] 下拉功能表的螢幕擷取畫面。已選取 [CMakeProject]。

  12. 展開 [方案總管] 中的專案子資料夾。 在 CMakeProject.cpp 檔案中,在 main() 中設定中斷點。 您也可以選取 [方案總管] 中的 [檢視選擇器] 按鈕,瀏覽至 CMake 目標檢視,如下列螢幕擷取畫面中的醒目提示:

    Visual Studio [方案總管] 的螢幕擷取畫面,其中顯示切換檢視的按鈕。它位於首頁按鈕的右側。

  13. 選取 [偵錯]>[開始],或按 F5。 您的專案會建置、可執行檔會在 WSL 2 發行版本上啟動,而 Visual Studio 會在中斷點停止執行。 您程式的輸出 (在此案例中為 "Hello CMake.") 會顯示在 Linux 主控台視窗中:

    執行 hello world 程式的螢幕擷取畫面。

    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 工具組。 以滑鼠右鍵按一下方案總管中的專案,然後選擇 [屬性]>[一般]>[平台工具組]

Visual Studio 下拉式清單的螢幕擷取畫面,其中已選取 [平台工具組],而在右側的另一個下拉式清單,其中已選取 [WSL2 工具組]。

如果您要以 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 專案