CppProperties.json Verweis

Ordnerprojekte öffnen, die CMake nicht verwenden, können Projektkonfigurationseinstellungen 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 ist, 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 (ist für MSVC oder -include für Clang zugeordnet/FI)
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 of the IntelliSense pop-up in the 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 Kompiliert mithilfe von x86-Tools für x86
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 Hiermit wird x64 Linux als Remotezielversion festgelegt.
linux_arm Hiermit wird ARM Linux als Remotezielversion festgelegt.

Benutzerdefinierte Umgebungen

Optional können Sie die environments Eigenschaft verwenden, um Variablengruppen entweder CppProperties.json global oder pro Konfiguration zu definieren. Diese Variablen verhalten sich wie Umgebungsvariablen im Kontext eines Open Folder-Projekts. Sie können mit der Syntax von tasks.vs.json und launch.vs.json nach der ${env.VARIABLE} Definition hier 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, in CppProperties.jsonder Sie 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 Arbeitsbereichordner
${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 Includeordner verfügt und auch * und andere allgemeine Header aus dem Windows SDK enthält *windows.h, sollten Sie ihre CppProperties.json Konfigurationsdatei mit den folgenden Komponenten 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 mit einer Entwickler-Eingabeaufforderung beginnen devenv.exe , die diese Variablen definiert. (Geben Sie im Windows-Startmenü "Entwicklertools" ein, um eine Verknüpfung mit der Eingabeaufforderung für Entwickler zu finden.)

Problembehandlung für IntelliSense-Fehler

Wenn die von Ihnen erwartete IntelliSense-Funktion nicht angezeigt wird, können Sie probleme beheben, indem Sie unter "Extras>Optionen>Text Editor>C/C++>" wechseln und die Protokollierung auf true"Aktivieren" festlegen. Versuchen Sie für den Beginn, den Protokolliergrad auf 5 festzulegen und die Protokollierungsfilter auf 8.

Screenshot of the Diagnostic logging settings in the Options dialog.

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

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