Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Diese Liste zeigt die unterstützten Werte an:
windows-msvc-x86windows-msvc-x64windows-msvc-armwindows-msvc-arm64android-clang-x86android-clang-x64android-clang-armandroid-clang-arm64ios-clang-x86ios-clang-x64ios-clang-armios-clang-arm64windows-clang-x86windows-clang-x64windows-clang-armwindows-clang-arm64linux-gcc-x86linux-gcc-x64linux-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.
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 ...".