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:
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 inheritEnvironments
werden müssen. Debugziele werden automatisch mit der Umgebung gestartet, in CppProperties.json
der 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.
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.json
Pfaden ü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 ...".