Freigeben über


CppProperties.json Verweis

Projekte im "Öffnen von Ordnern"-Modus, die kein CMake verwenden, können die Konfigurationseinstellungen für IntelliSense in einer CppProperties.json-Datei speichern. (CMake-Projekte verwenden eine CMakeSettings.json Datei.) Eine Konfiguration besteht aus Name/Wert-Paaren und definiert #include Pfade, Compileroptionen und andere Parameter. Weitere Informationen zum Hinzufügen von Konfigurationen in einem Open Folder-Projekt finden Sie unter Open Folder projects for C++. In den folgenden Abschnitten werden die verschiedenen Einstellungen zusammengefasst. Um eine vollständige Beschreibung des Schemas zu erhalten, navigieren Sie zu CppProperties_schema.json, deren vollständiger Pfad oben im Code-Editor angegeben wird, wenn CppProperties.json sie geöffnet ist.

Konfigurationseigenschaften

Eine Konfiguration kann folgende Eigenschaften aufweisen:

Name Beschreibung
inheritEnvironments Hiermit wird angegeben, für welche Umgebungen diese Konfiguration gilt.
name Dies ist der Konfigurationsname, der im Dropdownmenü für die C++-Konfiguration angezeigt wird.
includePath Eine durch Trennzeichen getrennte Liste von Ordnern, die im Includepfad angegeben werden sollen (ist für die meisten Compiler zugeordnet /I )
defines Die Liste der Makros, die definiert werden sollen (ist für die meisten Compiler zugeordnet /D )
compilerSwitches Eine oder mehrere zusätzliche Optionen, die das Verhalten von IntelliSense beeinflussen können
forcedInclude Header, der automatisch in jede Kompilierungseinheit eingeschlossen werden soll (entspricht /FI für MSVC oder -include für Clang)
undefines Die Liste der Makros, die nicht definiert werden sollen (ist für MSVC zugeordnet /U )
intelliSenseMode Die zu verwendende IntelliSense-Engine Sie können eine der vordefinierten, architekturspezifischen Varianten für MSVC, GCC oder Clang angeben.
environments Benutzerdefinierte Variablensätze, die sich wie Umgebungsvariablen in einer Eingabeaufforderung verhalten und mit dem ${env.VARIABLE} Makro aufgerufen werden.

intelliSenseMode-Werte

Der Code-Editor zeigt die verfügbaren Optionen an, wenn Sie mit der Eingabe beginnen:

Screenshot des IntelliSense-Popupelements im Editor.

Diese Liste zeigt die unterstützten Werte an:

  • windows-msvc-x86
  • windows-msvc-x64
  • windows-msvc-arm
  • windows-msvc-arm64
  • android-clang-x86
  • android-clang-x64
  • android-clang-arm
  • android-clang-arm64
  • ios-clang-x86
  • ios-clang-x64
  • ios-clang-arm
  • ios-clang-arm64
  • windows-clang-x86
  • windows-clang-x64
  • windows-clang-arm
  • windows-clang-arm64
  • linux-gcc-x86
  • linux-gcc-x64
  • linux-gcc-arm

Hinweis: Die Werte msvc-x86 und msvc-x64 werden nur aus älteren Gründen unterstützt. Verwenden Sie stattdessen die windows-msvc-*-Varianten.

Vordefinierte Umgebungen

Visual Studio bietet die folgenden vordefinierten Umgebungen für Microsoft C++, die der entsprechenden Developer-Eingabeaufforderung zugeordnet sind. Wenn Sie eine dieser Umgebungen erben, können Sie auf eine der Umgebungsvariablen verweisen, indem Sie die globale Eigenschaft env mit dieser Makrosyntax verwenden: ${env.VARIABLE}

Variablenname Beschreibung
vsdev Die Standardumgebung von Visual Studio
msvc_x86 Kompilieren Sie für x86 unter Verwendung von x86-Tools
msvc_x64 Kompiliert mithilfe von 64-Bit-Tools für AMD64
msvc_arm Kompiliert mithilfe von x86-Tools für ARM
msvc_arm64 Kompiliert mithilfe von x86-Tools für ARM64
msvc_x86_x64 Kompiliert mithilfe von x86-Tools für AMD64
msvc_arm_x64 Kompiliert mithilfe von 64-Bit-Tools für ARM
msvc_arm64_x64 Kompiliert mithilfe von 64-Bit-Tools für ARM64

Wenn die Linux-Workload installiert ist, können folgende Umgebungen verwendet werden, um Linux und WSL remote anzuzielen:

Variablenname Beschreibung
linux_x86 Hiermit wird x86 Linux als Remotezielversion festgelegt.
linux_x64 x64 Linux als Remoteziel verwenden
linux_arm ARM Linux als Fernziel festlegen

Benutzerdefinierte Umgebungen

Sie können optional die environments-Eigenschaft verwenden, um Variablengruppen entweder global oder pro Konfiguration zu definieren. Diese Variablen verhalten sich wie Umgebungsvariablen im Kontext eines Open Folder-Projekts. Nachdem sie hier definiert wurden, können Sie mit der ${env.VARIABLE}-Syntax von tasks.vs.json und launch.vs.json darauf zugreifen. Sie werden jedoch nicht unbedingt als tatsächliche Umgebungsvariablen an einer Eingabeaufforderung festgelegt, die Visual Studio intern verwendet.

Visual Studio 2019, Version 16.4 und höher: Konfigurationsspezifische Variablen, die in CppProperties.json definiert sind, werden automatisch von Debugzielen und Aufgaben aufgenommen, ohne dass sie festgelegt inheritEnvironmentswerden müssen. Debugziele werden automatisch mit der Umgebung gestartet, das Sie in CppProperties.json angeben.

Visual Studio 2019, Version 16.3 und früher: Wenn Sie eine Umgebung verwenden, müssen Sie sie in der inheritsEnvironments Eigenschaft angeben, auch wenn die Umgebung als Teil derselben Konfiguration definiert ist; die environment Eigenschaft gibt den Namen der Umgebung an. Das folgende Beispiel zeigt eine Beispielkonfiguration zum Aktivieren von IntelliSense für GCC in einer MSYS2-Installation. Beachten Sie, dass die Konfiguration sowohl die mingw_64-Umgebung definiert als auch erbt und wie die includePath-Eigenschaft auf die INCLUDE-Variable zugreifen kann.

"configurations": [
    {

      "inheritEnvironments": [
        "mingw_64"
      ],
      "name": "Mingw64",
      "includePath": [
        "${env.INCLUDE}",
        "${workspaceRoot}\\**",
      ],
      "intelliSenseMode": "linux-gcc-x64",
      "environments": [
        {
          "MINGW64_ROOT": "C:\\msys64\\mingw64",
          "BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
          "FLAVOR": "x86_64-w64-mingw32",
          "TOOLSET_VERSION": "9.1.0",
          "PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
          "INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};",
          "environment": "mingw_64"
        }
      ]
    }
  ]

Wenn Sie eine Eigenschaft innerhalb einer "environments" Konfiguration definieren, überschreibt sie alle globalen Variablen mit denselben Namen.

Integrierte Makros

Sie können innerhalb von CppProperties.json auf folgende integrierte Makros zugreifen:

Makro Beschreibung
${workspaceRoot} den vollständigen Pfad zum Arbeitsbereichsordner
${projectRoot} Der vollständige Pfad zu dem Ordner, in dem CppProperties.json platziert wird
${env.vsInstallDir} den vollständigen Pfad zum Ordner, in dem die ausgeführte Instanz von Visual Studio installiert ist

Beispiel

Wenn Ihr Projekt über einen Include-Ordner verfügt und auch *windows.h* und andere allgemeine Header aus dem Windows SDK enthält, sollten Sie Ihre CppProperties.json Konfigurationsdatei mit den folgenden Includes aktualisieren:

{
  "configurations": [
    {
      "name": "Windows",
      "includePath": [
        // local include folder
        "${workspaceRoot}\\include",
        // Windows SDK and CRT headers
        "${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\ucrt",
        "${env.NETFXSDKDir}\\include\\um",
        "${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\um",
        "${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\shared",
        "${env.VCToolsInstallDir}\\include"
      ]
    }
  ]
}

Hinweis

%WindowsSdkDir% und %VCToolsInstallDir% sind nicht als globale Umgebungsvariablen festgelegt. Stellen Sie sicher, dass Sie devenv.exe von einer Entwickler-Eingabeaufforderung, die diese Variablen definiert, starten. (Geben Sie im Windows-Startmenü "developer" ein, um eine Verknüpfung zur Entwickler-Eingabeaufforderung zu finden.)

IntelliSense-Fehler beheben

Wenn die von Ihnen erwartete IntelliSense-Funktion nicht angezeigt wird, können Sie die Problembehebung durchführen, indem Sie zu Tools>Optionen>Text-Editor>C/C++>Erweitert navigieren und Protokollierung aktivieren auf true setzen. Versuchen Sie für den Beginn, den Protokolliergrad auf 5 festzulegen und die Protokollierungsfilter auf 8.

Screenshot der Einstellungen für die Diagnoseprotokollierung im Dialogfeld „Optionen“.

Die Ausgabe wird an das Ausgabefenster weitergeleitet und wird angezeigt, wenn Sie "Ausgabe anzeigen von: Visual C++-Protokoll" auswählen. Die Ausgabe enthält unter anderem die Liste der tatsächlichen Include-Pfade, die IntelliSense versucht zu verwenden. Wenn die Pfade nicht mit denen in CppProperties.json übereinstimmen, versuchen Sie, den Ordner zu schließen und den Unterordner .vs zu löschen, der zwischengespeicherte Browserdaten enthält.

Um IntelliSense-Fehler zu beheben, die durch fehlende Include-Pfade verursacht werden, öffnen Sie die Registerkarte "Fehlerliste", und filtern Sie dann die Ausgabe nach "Nur IntelliSense" und Fehlercode E1696 "kann Quelldatei nicht öffnen ...".