Anleitung: Kompilieren und Debuggen von C++ mit WSL 2 in Visual Studio 2022

Visual Studio 2022 führt ein natives C++-Toolset für die Entwicklung des Windows-Subsystems für Linux Version 2 (WSL 2) ein. Dieses Toolset ist jetzt in Visual Studio 2022, Version 17.0 oder höher verfügbar.

WSL 2 ist die neue, empfohlene Version des Windows-Subsystems für Linux (WSL). Sie bietet eine bessere Linux-Dateisystemleistung, GUI-Unterstützung und vollständige Kompatibilität von Systemaufrufen. Mit dem WSL 2-Toolset von Visual Studio können Sie Visual Studio zum Kompilieren und Debuggen von C++-Code in WSL 2-Distributionen verwenden, ohne eine SSH-Verbindung hinzuzufügen. Sie können C++-Code bereits in WSL 1-Distributionen kompilieren und debuggen, indem Sie das native WSL 1-Toolset verwenden, das in Visual Studio 2019, Version 16.1 eingeführt wurde.

Das WSL 2-Toolset von Visual Studio unterstützt sowohl auf CMake als auch auf MSBuild basierende Linux-Projekte. CMake wird für alle plattformübergreifenden C++-Entwicklungen mit Visual Studio empfohlen. CMake wird empfohlen, da damit dasselbe Projekt auf Windows, WSL und Remotesystemen kompiliert und debuggt werden kann.

Eine Videopräsentation der Informationen in diesem Artikel finden Sie unter Video: Debuggen von C++ mit WSL 2-Distributionen und Visual Studio 2022.

Hintergrund des WSL 2-Toolsets

Bei der plattformübergreifenden C++-Unterstützung in Visual Studio wird davon ausgegangen, dass alle Quelldateien aus dem Windows-Dateisystem stammen. Wenn eine WSL 2-Distribution das Ziel ist, führt Visual Studio einen lokalen rsync-Befehl aus, um Dateien aus dem Windows-Dateisystem in das WSL-Dateisystem zu kopieren. Für die lokale rsync-Kopie ist kein Benutzereingriff erforderlich. Sie wird automatisch erstellt, wenn Visual Studio erkennt, dass Sie eine WSL 2-Distribution verwenden. Weitere Informationen zu den Unterschieden zwischen WSL 1 und WSL 2 finden Sie unter Vergleich von WSL 1 und WSL 2.

CMake Presets-Integration in Visual Studio unterstützt das WSL 2-Toolset. Weitere Informationen finden Sie unter CMake-Voreinstellungsintegration in Visual Studio und Visual Studio Code und Konfigurieren und Kompilieren mit CMake-Voreinstellungen in Visual Studio. In diesem Artikel finden Sie auch erweiterte Informationen unter Überlegungen zu erweiterten WSL 2- und CMake-Projekten.

Installieren der Buildtools

Installieren Sie die Tools, die zum Kompilieren und Debuggen unter WSL 2 erforderlich sind. Sie installieren in einem späteren Schritt eine aktuelle Version von CMake mit der binären CMake-Bereitstellung von Visual Studio.

  1. Installieren Sie WSL und eine WSL 2-Distribution, indem Sie die Anweisungen unter Installieren von WSL befolgen.

  2. Wenn Ihre Distribution apt verwendet (in dieser Anleitung wird Ubuntu verwendet), verwenden Sie die folgenden Befehle, um die erforderlichen Buildtools auf Ihrer WSL 2-Distribution zu installieren:

    sudo apt update
    sudo apt install g++ gdb make ninja-build rsync zip
    

    Die obigen apt-Befehle installieren:

    • einen C++-Compiler
    • gdb
    • CMake
    • rsync
    • zip
    • einen zugrunde liegenden Buildsystemgenerator

Plattformübergreifende CMake-Entwicklung mit einer WSL 2-Distribution

In dieser Anleitung werden die GCC und Ninja unter Ubuntu verwendet. Sowie Visual Studio 2022, Version 17.0 Preview 2 oder höher.

Visual Studio definiert ein CMake-Projekt als Ordner mit einer CMakeLists.txt-Datei im Projektstamm. In dieser Anleitung erstellen Sie ein neues CMake-Projekt mithilfe der CMake-Projekt-Vorlage von Visual Studio:

  1. Wählen Sie in Visual Studio unter Erste Schritte die Option Neues Projekt erstellen aus.

    Screenshot des Dialogfelds Die verfügbaren Optionen sind: Klonen eines Repositorys, Öffnen eines Projekts oder einer Projektmappe, Öffnen eines lokalen Ordners, Erstellen eines neuen Projekts oder Fortfahren ohne Code.":::

  2. Geben Sie im Textfeld Nach Vorlagen suchen den Text „cmake“ ein. Wählen Sie den CMake-Projekttyp und dann Weiter aus. Wählen Sie einen Namen und einen Speicherort für das Projekt aus, und klicken Sie dann auf Erstellen.

  3. Aktivieren Sie die CMake-Voreinstellungsintegration von Visual Studio. Wählen Sie Tools>Optionen>CMake>Allgemein aus. Wählen Sie Verwendung von CMake-Voreinstellungen zum Konfigurieren, Kompilieren und Testen bevorzugen aus, und klicken Sie dann auf OK. Stattdessen hätten Sie dem Projektstamm eine CMakePresets.json-Datei hinzufügen können. Weitere Informationen finden Sie unter Aktivieren der CMake-Voreinstellungsintegration.

    Screenshot der Visual Studio-Projektoptionen. Cmake > General ist ausgewählt.

    In der Konfigurationsdateigruppe "CMake Presets verwenden, falls verfügbar, andernfalls CMakeSettings.json verwenden" wird aufgerufen und ausgewählt.

  4. So aktivieren Sie die Integration: Wählen Sie im Hauptmenü Datei>Ordner schließen aus. Die Seite Erste Schritte wird angezeigt. Wählen Sie unter Zuletzt verwendete öffnen den Ordner aus, den Sie gerade geschlossen haben, um ihn wieder zu öffnen.

  5. Es gibt drei Dropdownmenüs in der Hauptmenüleiste von Visual Studio. Verwenden Sie das Dropdownmenü auf der linken Seite, um Ihr aktives Zielsystem auszuwählen. Dies ist das System, auf dem CMake zum Konfigurieren und Kompilieren des Projekts aufgerufen wird. Visual Studio fragt für WSL-Installationen mit wsl -l -v an. In der folgenden Abbildung wird WSL2: Ubuntu-20.04 als ausgewähltes Zielsystem angezeigt.

    Screenshot der Visual Studio-Zielsystemdropdownliste. WSL2: Ubuntu-20.04 ist ausgewählt.

    Hinweis

    Wenn Visual Studio Ihr Projekt automatisch zu konfigurieren beginnt, lesen Sie Schritt 11 zum Verwalten der binären CMake-Bereitstellung, und fahren Sie dann mit dem folgenden Schritt fort. Weitere Informationen zum ändern dieses Verhaltens finden Sie unter Ändern der automatischen Konfiguration und der Cachebenachrichtigungen.

  6. Verwenden Sie das Dropdownmenü in der Mitte, um Ihre aktive Konfigurationsvoreinstellung auszuwählen. Konfigurationsvoreinstellungen weisen Visual Studio an, wie CMake aufgerufen und das zugrunde liegende Buildsystem generiert werden soll. In Schritt 7 ist die aktive Konfigurationsvoreinstellung die von Visual Studio erstellte Voreinstellung linux-default. Wählen Sie "Konfigurationen verwalten..." aus, um eine benutzerdefinierte Voreinstellung zu erstellen. Weitere Informationen zum Konfigurieren von Voreinstellungen finden Sie unter "Konfigurieren von Voreinstellungen auswählen" und "Voreinstellungen bearbeiten".

    Screenshot des aktiven Konfiguration-Voreinstellungs-Dropdownmenüs von Visual Studio. Konfigurationen verwalten... ist ausgewählt.

  7. Verwenden Sie das Dropdownmenü auf der rechten Seite, um Ihre aktive Buildvoreinstellung auszuwählen. Buildvoreinstellungen weisen Visual Studio an, wie der Build aufgerufen wird. In der Abbildung für Schritt 7 ist die aktive Buildvoreinstellung die von Visual Studio erstellte Standard-Buildvoreinstellung. Weitere Informationen zu Buildvoreinstellungen finden Sie unter Auswählen einer Buildvoreinstellung.

  8. Konfigurieren Sie das Projekt unter WSL 2. Wenn die Projektgenerierung nicht automatisch gestartet wird, rufen Sie die Konfiguration manuell mit Projekt>Konfigurieren project-name auf.

    Screenshot des Dropdownmenüs

  9. Wenn auf Ihrer WSL 2-Distribution keine unterstützte Version von CMake installiert ist, werden Sie von Visual Studio unter dem Menüband des Hauptmenüs aufgefordert, eine aktuelle Version von CMake bereitzustellen. Wählen Sie Ja aus, um CMake-Binärdateien für Ihre WSL 2-Distribution bereitzustellen.

    Screenshot einer Eingabeaufforderung unter der Visual Studio-Symbolleiste

    Der Benutzer wird aufgefordert, ob er die neuesten C Make-Binärdateien von C make installieren soll. org, da die unterstützte C Make Version nicht installiert ist."

  10. Vergewissern Sie sich, dass der Konfigurationsschritt abgeschlossen wurde und dass im Fenster Ausgabe im Bereich CMake die Meldung CMake-Generierung abgeschlossen angezeigt wird. Builddateien werden in ein Verzeichnis im Dateisystem der WSL 2-Distribution geschrieben.

    Screenshot des Visual Studio-Ausgabefensters. Sie enthält Nachrichten, die während des Konfigurationsschritts generiert werden, einschließlich der Fertigstellung der C Make-Generierung.

  11. Wählen Sie das aktive Debugziel aus. Im Dropdownmenü „Debuggen“ werden alle CMake-Ziele aufgeführt, die für das Projekt verfügbar sind.

    Screenshot des Visual Studio-Dropdownmenüs

  12. Erweitern Sie den Projektunterordner im Projektmappen-Explorer. Legen Sie in der CMakeProject.cpp-Datei einen Breakpoint in main() fest. Sie können auch zur CMake-Zielansicht navigieren, indem Sie im Projektmappen-Explorer auf die Schaltfläche „Auswahl anzeigen“ klicken, die im folgenden Screenshot hervorgehoben ist:

    Screenshot des Visual Studio-Projektmappen-Explorers mit der Schaltfläche zum Wechseln von Ansichten. Sie befindet sich rechts neben der Startschaltfläche.

  13. Wählen Sie Debuggen>Start aus, oder drücken Sie F5. Ihr Projekt wird erstellt, die ausführbare Datei wird auf Ihrer WSL 2-Distribution gestartet, und Visual Studio hält die Ausführung am Haltepunkt an. Die Ausgabe Ihres Programms (in diesem Fall "Hello CMake.") ist im Linux-Konsolenfenster sichtbar:

    Screenshot eines laufenden Hello World-Programms.

    Im Konsolenfenster von Visual Studio Linux wird die Ausgabe des Programms angezeigt: "Hello C Make". Das Editorfenster zeigt das Hello World-Programm an. Die Ausführung wurde an einem Haltepunkt in der Zeile beendet, die den Wert "0" angibt."

Sie haben nun eine C++-App mit WSL 2 und Visual Studio 2022 kompiliert und debuggt.

Überlegungen zu erweiterten WSL 2- und CMake-Projekten

Visual Studio bietet nur native Unterstützung für WSL 2 für CMake-Projekte, die CMakePresets.json als aktive Konfigurationsdatei verwenden. Informationen zum Migrieren von CMakeSettings.json nach CMakePresets.json finden Sie unter Aktivieren der CMake-Voreinstellungsintegration in Visual Studio.

Wenn Sie eine WSL 2-Distribution als Ziel verwenden und das WSL 2-Toolset nicht verwenden möchten, legen Sie in der Anbieterzuordnung für Visual Studio-Remoteeinstellungen in CMakePresets.json forceWSL1Toolset auf true fest. Weitere Informationen finden Sie in Anbieterzuordnungen in den Visual Studio-Remoteeinstellungen.

Wenn forceWSL1Tooslet auf truefestgelegt ist, verwaltet Visual Studio keine Kopie Ihrer Quelldateien im WSL-Dateisystem. Stattdessen wird auf Quelldateien im eingebundenen Windows-Laufwerk (/mnt/…) zugegriffen.

In den meisten Fällen ist es am besten, das WSL 2-Toolset mit WSL 2-Distributionen zu verwenden, da WSL 2 langsamer ist, wenn Projektdateien stattdessen im Windows-Dateisystem gespeichert sind. Weitere Informationen zur Dateisystemleistung in WSL 2 finden Sie unter Vergleich von WSL 1 und WSL 2.

Geben Sie erweiterte Einstellungen an, z. B. den Pfad zum Verzeichnis in WSL 2, in das das Projekt kopiert wird, das Kopieren von Quelloptionen sowie rsync-Befehlsargumente in der Anbieterzuordnung für Visual Studio-Remoteeinstellungen in CMakePresets.json. Weitere Informationen finden Sie in Anbieterzuordnungen in den Visual Studio-Remoteeinstellungen.

Systemheader werden weiterhin automatisch in das Windows-Dateisystem kopiert, um die native IntelliSense-Benutzeroberfläche zu gewährleisten. Sie können die Header, die in diese Kopie eingeschlossen oder ausgeschlossen werden, in der Anbieterzuordnung für Visual Studio-Remoteeinstellungen in CMakePresets.json anpassen.

Sie können den IntelliSense-Modus ändern oder andere IntelliSense-Optionen in der Anbieterzuordnung für Visual Studio-Einstellungen in CMakePresets.json angeben. Weitere Informationen zur Anbieterzuordnung finden Sie unter Anbieterzuordnung für Visual Studio-Remoteeinstellungen.

Auf WSL 2- und MSBuild-basierende Linux-Projekte

CMake wird für die plattformübergreifende C++-Entwicklung mit Visual Studio empfohlen, da Ihnen damit das Kompilieren und Debuggen desselben Projekts auf Windows-, WSL- und Remotesystemen ermöglicht wird.

Möglicherweise verfügen Sie jedoch über ein MSBuild-basiertes Linux-Projekt.

Wenn Sie über ein MSBuild-basiertes Linux-Projekt verfügen, können Sie ein Upgrade auf das WSL 2-Toolset in Visual Studio durchführen. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie dann "Eigenschaften>: Allgemeine>Plattformtoolset" aus:

Screenshot eines Visual Studio Dropdownmenüs mit ausgewählter Option „Plattformtoolset“ und einem weiteren Dropdownmenü auf der rechten Seite mit ausgewählter Option „WSL2-Toolset“.

Wenn Sie eine WSL 2-Distribution als Ziel verwenden und das WSL 2-Toolset nicht verwenden möchten, wählen Sie im Platform Toolset-Dropdown GCC für Windows-Subsystem für Linux oder das Toolset Clang für Windows-Subsystem für Linux aus. Wenn eines dieser Toolsets ausgewählt ist, verwaltet Visual Studio keine Kopie Ihrer Quelldateien im WSL-Dateisystem und greift stattdessen über das bereitgestellte Windows-Laufwerk (/mnt/…) auf Quelldateien zu. Systemheader werden weiterhin automatisch in das Windows-Dateisystem kopiert, um die native IntelliSense-Benutzeroberfläche zu gewährleisten. Passen Sie die Header, die in dieser Kopie eingeschlossen oder ausgeschlossen werden, in Eigenschaftenseiten>Allgemein an.

In den meisten Fällen ist es am besten, das WSL 2-Toolset mit WSL 2-Distributionen zu verwenden, da WSL 2 langsamer ist, wenn Projektdateien im Windows-Dateisystem gespeichert sind. Weitere Informationen finden Sie unter Vergleich von WSL 1 und WSL 2.

Weitere Informationen

Video: Debuggen von C++ mit WSL 2-Distributionen und Visual Studio 2022
Visual Studio 2022 herunterladen
Erstellen eines CMake-Projekts unter Linux in Visual Studio
Tutorial: Debuggen eines CMake-Projekts auf einem Windows-Remotecomputer