Konfigurieren eines auf MSBuild basierenden C++-Projekts für Linux in Visual Studio

Die Unterstützung für Linux ist in Visual Studio 2017 und höher verfügbar.

In diesem Thema wird das Konfigurieren eines auf MSBuild basierenden C++-Projekts für Linux entsprechend der Erläuterung unter Erstellen eines auf MSBuild basierenden C++-Projekts für Linux in Visual Studio beschrieben. Informationen zu CMake-Projekten für Linux finden Sie unter Konfigurieren eines Linux-CMake-Projekts.

Sie können ein Linux-Projekt so konfigurieren, dass dieses auf einen physischen Linux-Computer, einen virtuellen Computer oder das Windows-Subsystem für Linux (WSL) abzielt.

Visual Studio 2019, Version 16.1 und höher:

  • Wenn Sie WSL als Ziel verwenden, können Sie die Kopiervorgänge vermeiden, die erforderlich sind, um IntelliSense-Ergebnisse zu generieren und abzurufen, die erforderlich sind, wenn Sie ein Linux-Remotesystem als Ziel verwenden.

  • Sie können separate Linux-Ziele zum Erstellen und Debuggen angeben.

Allgemeine Einstellungen

Wählen Sie zum Anzeigen von Konfigurationsoptionen das Menü Projekt > Eigenschaften aus, oder klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer und wählen Sie dann Eigenschaften aus dem Kontextmenü aus: Die allgemeinen Einstellungen werden angezeigt.

Screenshot des Dialogfelds „Eigenschaftenseiten“, „Allgemeine Konfiguration“.

Standardmäßig wird eine ausführbare Datei (.out) erstellt. Verwenden Sie zum Erstellen einer statischen oder dynamischen Bibliothek entweder die Einstellung Konfigurationstyp oder eine vorhandene Makefile-Datei.

Wenn Sie für das Windows-Subsystem für Linux (WSL) entwickeln, ist die WSL-Version 1 auf 64 parallele Kompilierungsprozesse beschränkt. Dies wird von der Maximale Anzahl paralleler Kompilierungsaufträge-Einstellung unter Konfigurationseigenschaften > C/C++ > Allgemein geregelt.

Unabhängig von der verwendeten WSL-Version sollten Sie Ninja zum Entwickeln verwenden, wenn Sie mehr als 64 parallele Kompilierungsprozesse beabsichtigen. Ninja ist allgemein schneller und zuverlässiger. Für das Erstellen mit Ninja verwenden Sie die Einstellung Verwalteten inkrementellen Build aktivieren unter Konfigurationseigenschaften > Allgemein.

Weitere Informationen zu den Einstellungen auf den Eigenschaftenseiten finden Sie unter Linux Project Property Page Reference (Referenz zur Linux-Projekteigenschaftenseite).

Remoteeinstellungen

Konfigurieren Sie die Remoteeinstellungen, die unter Allgemein angezeigt werden, um die Einstellungen für den Linux-Remotecomputer zu ändern.

  • Verwenden Sie den Remotebuildcomputer, um einen Linux-Remotezielcomputer anzugeben. Dadurch können Sie eine der zuvor erstellten Verbindungen auswählen. Weitere Informationen zum Erstellen eines neuen Eintrags finden Sie im Abschnitt Connecting to Your Remote Linux Computer (Herstellen einer Verbindung mit Ihrem Linux-Remotecomputer).

    Screenshot: Remotebuildcomputer.

    Visual Studio 2019, Version 16.7 und höher: Wenn Sie das Windows-Subsystem für Linux (WSL) als Ziel verwenden, legen Sie im Dropdownmenü PlattformtoolsetGCC für das Windows-Subsystem für Linux fest. Die anderen Remoteoptionen werden ausgeblendet, und der Pfad zur standardmäßigen WSL-Shell wird stattdessen angezeigt:

    Screenshot: WSL-Buildcomputer.

    Wenn Sie über parallele WSL-Installationen verfügen, können Sie hier einen anderen Pfad angeben. Weitere Informationen zum Verwalten von mehreren Distributionen finden Sie unter Manage and configure Windows Subsystem for Linux (Verwalten und Konfigurieren von Windows-Subsystem für Linux).

    Auf der Seite Konfigurationseigenschaften>Debuggen können Sie ein anderes Ziel für das Debuggen angeben.

  • Das Remotebuild-Stammverzeichnis bestimmt das Stammverzeichnis, in dem das Projekt auf dem Linux-Remotecomputer erstellt wird. Standardmäßig handelt es sich dabei um ~/projects, sofern nicht anders angegeben.

  • Das Remotebuild-Projektverzeichnis ist das Verzeichnis, in dem dieses spezifische Projekt auf dem Linux-Remotecomputer erstellt wird. Standardmäßig handelt es sich dabei um das Verzeichnis $(RemoteRootDir)/$(ProjektName) . Es wird zu einem Verzeichnis erweitert, das den Namen des aktuellen Projekts unter dem oben angegebenen Stammverzeichnis trägt.

Hinweis

Verwenden Sie zum Ändern der C- und C++-Standardcompiler bzw. der Linker und Archivierungsprogramme, die zur Erstellung des Projekts verwendet werden, die entsprechenden Einträge im Abschnitt C/C++ > Allgemein sowie im Abschnitt Linker > Allgemein. Sie können beispielsweise eine bestimmte Version von GCC (GNU Compiler Collection) oder Clang angeben. Weitere Informationen finden Sie unter C/C++-Eigenschaften (Linux C++) und Linkereigenschaften (Linux C++).

Kopieren von Quellen (nur Remotesysteme)

Hinweis

Dieser Abschnitt gilt nicht, wenn auf WSL abgezielt wird.

Beim Erstellen auf Remotesystemen werden die Quelldateien auf Ihrem Entwicklungs-PC auf den Linux-Computer kopiert und dort kompiliert. Standardmäßig werden alle Datenquellen im Visual Studio-Projekt an die Speicherorte kopiert, die in den oben genannten Einstellungen festgelegt wurden. Zusätzliche Quellen können ebenfalls zur Liste hinzugefügt werden und das Kopieren von Datenquellen kann vollständig deaktiviert werden, was der Standardeinstellung für Makefile-Projekt entspricht.

  • Zu kopierende Quellen legt fest, welche Quellen auf den Remotecomputer kopiert werden. Standardmäßig bezieht @(SourcesToCopyRemotely) alle Quellcodedateien im Projekt, jedoch keine Asset-/Ressourcendateien wie beispielsweise Bilder ein.

  • Quellen kopieren kann aktiviert und deaktiviert werden und kann damit das Kopieren von Quelldateien auf den Remotecomputer aktivieren bzw. deaktivieren.

  • Mit Weitere zu kopierende Quellen können Sie zusätzliche Quelldateien hinzufügen, die anschließend auf das Remotesystem kopiert werden. Sie können eine durch Semikolons getrennte Liste angeben, oder Sie können die Syntax : = verwenden, um einen lokalen und einen Remote-Namen anzugeben:

C:\Projects\ConsoleApplication1\MyFile.cpp:=~/projects/ConsoleApplication1/ADifferentName.cpp;C:\Projects\ConsoleApplication1\MyFile2.cpp:=~/projects/ConsoleApplication1/ADifferentName2.cpp;

Buildereignisse

Da die gesamte Kompilierung auf einem Remotecomputer (oder WSL) erfolgt, wurden dem Abschnitt „Buildereignisse“ in den Projekteigenschaften mehrere zusätzliche Buildereignisse hinzugefügt. Dazu gehören das Remote-Präbuildereignis, das Remote-Prälinkereignis und das Remote-Postbuildereignis. Diese Ereignisse finden auf dem Remotecomputer vor oder nach den einzelnen Schritten im Prozess statt.

Screenshot des Dialogfelds „Eigenschaftenseiten“ mit Buildereignissen.

IntelliSense für Header auf Remotesystemen

Beim Hinzufügen einer neuen Verbindung im Verbindungs-Manager erkennt Visual Studio automatisch die Includeverzeichnisse für den Compiler auf dem Remotesystem. Visual Studio komprimiert diese Dateien dann und kopiert sie in ein Verzeichnis auf dem lokalen Windows-Computer. Wenn Sie anschließend diese Verbindung in Visual Studio oder CMake nutzen, wird mithilfe der Header in diesen Verzeichnissen IntelliSense bereitgestellt.

Hinweis

In Visual Studio 2019, Version 16.5 und höher, wurde die Remoteheaderkopie optimiert. Header werden nun bedarfsgesteuert kopiert, wenn ein Linux-Projekt geöffnet oder CMake für ein Linux-Ziel konfiguriert wird. Der Kopiervorgang erfolgt pro Projekt und im Hintergrund, basierend auf den angegebenen Compilern des Projekts. Weitere Informationen finden Sie unter Improvements to Accuracy and Performance of Linux IntelliSense (Verbesserung der Genauigkeit und Leistung von Linux IntelliSense).

Diese Funktion hängt davon ab, ob auf dem Linux-Computer Zip installiert ist. Sie können Zip mit diesem apt-get-Befehl installieren:

sudo apt install zip

Navigieren Sie zum Verwalten Ihres Header-Caches zu Tools > Optionen, Plattformübergreifend > Verbindungs-Manager > IntelliSense-Manager für Remoteheader. Wählen Sie zum Aktualisieren des Header-Caches nach Änderungen auf dem Linux-Computer die Remoteverbindung aus, und klicken Sie dann auf Aktualisieren. Klicken Sie auf Löschen, um die Header zu entfernen, ohne die Verbindung selbst zu löschen. Klicken Sie auf Erkunden, um das lokale Verzeichnis im Datei-Explorer zu öffnen. Behandeln Sie diesen Ordner, als sei er schreibgeschützt. Wählen Sie zum Herunterladen von Headern für eine vorhandene Verbindung, die vor Version 15.3 von Visual Studio 2017 erstellt wurde, die Verbindung aus, und klicken Sie dann auf Herunterladen.

Screenshot des Dialogfelds „Optionen“, in dem „Plattformübergreifend >Verbindungs-Manager > IntelliSense-Manager für Remoteheader“ ausgewählt ist.

Screenshot des Dialogfelds „Optionen“, in dem „Plattformübergreifend > > Verbindungs-Manager“ ausgewählt ist

Sie können die Protokollierung aktivieren, um Probleme zu beheben:

Screenshot des Dialogfelds „Optionen“ mit Remoteprotokollierungsoptionen.

Linux-Zielgebietsschema

Visual Studio-Spracheinstellungen werden nicht an Linux-Ziele weitergegeben, da Visual Studio installierte Pakete nicht verwaltet oder konfiguriert. Nachrichten, die im Ausgabefenster angezeigt werden (z. B. Buildfehler), werden mit der Sprache und dem Gebietsschema des Linux-Ziels angezeigt. Sie müssen Ihre Linux-Ziele für das gewünschte Gebietsschema konfigurieren.

Siehe auch

Festlegen der Compiler- und Buildeigenschaften
Allgemeine C++-Eigenschaften (Linux C++)
VC++-Verzeichnisse (Linux C++)
Kopieren von Quellprojekteigenschaften (Linux C++)
Buildereigniseigenschaften (Linux C++)