Referenz der C++-Erweiterungseinstellungen
Die Einstellungen der C++-Erweiterung sind in hohem Maße konfigurierbar. Dieser Artikel erläutert das Schema für die Datei c_cpp_properties.json. Allgemeine Informationen zu Einstellungen in VS Code finden Sie unter Einstellungen konfigurieren sowie in der Variablenreferenz und unter Standard-VS-Code-Einstellungen.
Möchten Sie mit der Konfiguration Ihres C++-Projekts beginnen? Starten Sie mit IntelliSense konfigurieren.
Beispiel für Variablen
Der folgende JSON-Ausschnitt ist eine Beispielkonfiguration für c_cpp_properties.json. Sie müssen nur die relevanten Variablen in Ihre JSON-Datei aufnehmen; fehlende Felder werden von der C++-Erweiterung automatisch mit ihren Standardwerten gefüllt.
{
"env": {
"myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
"myDefines": ["DEBUG", "MY_FEATURE=1"]
},
"configurations": [
{
"name": "Mac",
"compilerPath": "/usr/bin/clang++",
"intelliSenseMode": "macos-clang-x64",
"includePath": ["${myIncludePath}", "${workspaceFolder}/**"],
"defines": ["${myDefines}"],
"cStandard": "c17",
"cppStandard": "c++20",
"macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
"browse": {
"path": ["${myIncludePath}", "${workspaceFolder}"]
}
}
],
"version": 4,
"enableConfigurationSquiggles": true
}
Eigenschaften auf oberster Ebene
-
env: Ein Array benutzerdefinierter Variablen, die für die Ersetzung in den Konfigurationen über die Standard-Umgebungsvariablensyntax verfügbar sind:${<var>}oder${env:<var>}. Strings und Arrays von Strings werden akzeptiert. -
configurations: Ein Array von Konfigurationsobjekten, die der IntelliSense-Engine Informationen über Ihr Projekt und Ihre Einstellungen bereitstellen. Standardmäßig erstellt die Erweiterung eine Konfiguration basierend auf Ihrem Betriebssystem. Sie können auch weitere Konfigurationen hinzufügen. -
version: Wir empfehlen, dieses Feld nicht zu bearbeiten. Es verfolgt die aktuelle Version der Dateic_cpp_properties.json, damit die Erweiterung weiß, welche Eigenschaften und Einstellungen vorhanden sein sollten und wie diese Datei auf die neueste Version aktualisiert werden kann. -
enableConfigurationSquiggles: Setzen Sie dies auftrue, um Fehler, die in der Dateic_cpp_properties.jsonerkannt wurden, an die C++-Erweiterung zu melden.
Konfigurationseigenschaften
-
name: Ein benutzerfreundlicher Name, der eine Konfiguration identifiziert.Linux,MacundWin32sind spezielle Bezeichner für Konfigurationen, die auf den jeweiligen Plattformen automatisch ausgewählt werden. Die Statusleiste in VS Code zeigt Ihnen, welche Konfiguration aktiv ist. Sie können auch das Label in der Statusleiste auswählen, um die aktive Konfiguration zu ändern. -
compilerPath: Der vollständige Pfad zum Compiler, den Sie zum Erstellen Ihres Projekts verwenden (z. B./usr/bin/gcc), um ein präziseres IntelliSense zu ermöglichen. Die Erweiterung fragt den Compiler ab, um die System-Include-Pfade und Standard-Definitionen für IntelliSense zu ermitteln.Wenn Sie
"compilerPath": ""(leerer String) festlegen, wird die Abfrage des Compilers übersprungen. Dies ist nützlich, wenn Ihr bevorzugter Compiler die für die Abfrage verwendeten Argumente nicht unterstützt, da die Erweiterung standardmäßig alle unterstützten Compiler verwendet, die sie finden kann (wie MSVC). Das Weglassen der EigenschaftcompilerPathführt nicht zum Überspringen der Abfrage. -
compilerArgs: Compiler-Argumente zur Änderung der Include-Pfade oder Definitionen, zum Beispiel-nostdinc++,-m32, etc. Argumente, die zusätzliche, durch Leerzeichen getrennte Argumente erfordern, sollten als separate Argumente im Array eingegeben werden. Verwenden Sie beispielsweise für--sysroot <arg>den Eintrag\"--sysroot\", \"<arg>\". -
intelliSenseMode: Der zu verwendende IntelliSense-Modus, der einer architekturspezifischen Variante von MSVC, gcc oder Clang zugeordnet ist. Wenn er nicht festgelegt ist oder auf${default}steht, wählt die Erweiterung den Standardwert für die jeweilige Plattform.Plattform-Standards
- Windows:
windows-msvc-x64 - Linux:
linux-gcc-x64 - macOS:
macos-clang-x64
IntelliSense-Modi, die nur
<compiler>-<architecture>-Varianten angeben (z. B.gcc-x64), sind Legacy-Modi und werden automatisch in<platform>-<compiler>-<architecture>-Varianten basierend auf der Host-Plattform konvertiert. - Windows:
-
includePath: Ein Include-Pfad ist ein Verzeichnis von Header-Dateien, die von einer Quelldatei eingebunden werden. Wenn eine Quelldatei beispielsweise die Include-Anweisung#include "myHeaderFile.h"enthält, fügen Sie den Pfad dieser Header-Datei zumincludePathhinzu. Geben Sie eine Liste von Pfaden an, die die IntelliSense-Engine bei der Suche nach inkludierten Header-Dateien verwenden soll. Die Suche in diesen Pfaden erfolgt nicht rekursiv. Geben Sie/**am Ende des Pfades an, um eine rekursive Suche anzuzeigen. Zum Beispiel durchsucht${workspaceFolder}/**alle Unterverzeichnisse, während${workspaceFolder}dies nicht tut. Wenn Sie Windows mit installiertem Visual Studio verwenden oder ein Compiler in der EinstellungcompilerPathangegeben ist, sollten die System-Include-Pfade hier nicht aufgeführt werden. -
defines: Eine Liste von Präprozessor-Definitionen, die die IntelliSense-Engine beim Parsen von Dateien verwenden soll. Optional können Sie=verwenden, um einen Wert festzulegen, z. B.VERSION=1. -
cStandard: Die Version des C-Sprachstandards, die für IntelliSense verwendet werden soll. Zum Beispielc17,gnu23oder${default}. Hinweis: GNU-Standards werden nur verwendet, um den festgelegten Compiler abzufragen und GNU-Definitionen zu erhalten; IntelliSense emuliert die entsprechende C-Standardversion. -
cppStandard: Die Version des C++-Sprachstandards, die für IntelliSense verwendet werden soll. Zum Beispielc++20,gnu++23oder${default}. Hinweis: GNU-Standards werden nur verwendet, um den festgelegten Compiler abzufragen und GNU-Definitionen zu erhalten; IntelliSense emuliert die entsprechende C++-Standardversion. -
configurationProvider: Die ID einer VS-Code-Erweiterung, die IntelliSense-Konfigurationsinformationen für Quelldateien bereitstellen kann. Verwenden Sie beispielsweise die VS-Code-Erweiterungs-IDms-vscode.cmake-tools, um Konfigurationsinformationen der CMake Tools-Erweiterung bereitzustellen. Wenn Sie einenconfigurationProviderangegeben haben, hat die von ihm bereitgestellte Konfiguration Vorrang vor Ihren anderen Einstellungen inc_cpp_properties.json.Eine Erweiterung, die als
configurationProviderfungieren soll, muss die vscode-cpptools-api implementieren. -
mergeConfigurations: Setzen Sie dies auftrue, um Include-Pfade, Definitionen und erzwungene Includes (forced includes) mit denen eines Konfigurationsanbieters zusammenzuführen. -
windowsSdkVersion: Die Version des Windows SDK-Include-Pfads, die unter Windows verwendet werden soll, zum Beispiel10.0.17134.0. -
macFrameworkPath: Eine Liste von Pfaden, die die IntelliSense-Engine verwenden soll, um nach inkludierten Headern aus Mac-Frameworks zu suchen. -
forcedInclude: Eine Liste von Dateien, die inkludiert werden sollen, bevor Text in der Quelldatei verarbeitet wird. Die Dateien werden in der aufgelisteten Reihenfolge inkludiert. -
compileCommands: Ein Array von Pfaden, die den vollständigen Pfad zur Dateicompile_commands.jsonfür den Arbeitsbereich enthalten. Wenn es einen passenden Eintrag incompile_commands.jsonfür eine im Editor geöffnete Datei gibt, wird diese Befehlszeile verwendet, um IntelliSense für diese Datei zu konfigurieren, anstatt die anderen Felder vonc_cpp_properties.json. Weitere Informationen zum Dateiformat finden Sie in der Clang-Dokumentation. Einige Build-Systeme, wie CMake, vereinfachen die Erstellung dieser Datei. -
dotConfig: Ein Pfad zu einer.config-Datei, die vom Kconfig-System erstellt wurde. Das Kconfig-System generiert eine Datei mit allen Definitionen, die zum Erstellen eines Projekts erforderlich sind. Beispiele für Projekte, die das Kconfig-System verwenden, sind der Linux-Kernel und NuttX RTOS. -
customConfigurationVariables: Benutzerdefinierte Variablen, die über den Befehl${cpptools:activeConfigCustomVariable}abgefragt werden können, um sie für die Eingabevariablen inlaunch.jsonodertasks.jsonzu verwenden. -
browse: Die Menge an Eigenschaften, die in Verbindung mit IntelliSense verwendet werden, um alle Symbole in Ihrer Codebasis zu identifizieren. Diese Eigenschaften werden von Funktionen wie Gehe zu Definition/Deklaration, der globalen Symbolsuche oder dann verwendet, wenn die "Standard"-IntelliSense-Engine nicht in der Lage ist, die#includesin Ihren Quelldateien aufzulösen. -
recursiveIncludes: Eine Menge an Eigenschaften, die dazu dienen zu konfigurieren, wie die Erweiterung einenincludePath-Eintrag verarbeitet, der eine rekursive Suche angibt.
Browse-Eigenschaften
-
path: Eine Liste von Pfaden, deren Quelldateien für die globale Symbolsuche geparst werden. Wenn weggelassen, wirdincludePathalspathverwendet. Die Suche in diesen Pfaden ist standardmäßig rekursiv. Geben Sie*an, um eine nicht-rekursive Suche anzuzeigen. Zum Beispiel durchsucht${workspaceFolder}alle Unterverzeichnisse, während${workspaceFolder}/*dies nicht tut. -
limitSymbolsToIncludedHeaders: Wenntrue, parst der Tag-Parser nur Header-Dateien, die direkt oder indirekt von einer Quelldatei in${workspaceFolder}inkludiert werden. Wennfalse, parst der Tag-Parser alle Codedateien, die in den imbrowse.path-Array angegebenen Pfaden gefunden werden. -
databaseFilename: Der Pfad zur generierten Symboldatenbank. Diese Eigenschaft weist die Erweiterung an, die Arbeitsbereichs-Symboldatenbank an einem anderen Ort als dem Standard-Speicherort des Arbeitsbereichs zu speichern. Wenn ein relativer Pfad angegeben wird, bezieht er sich auf den Standard-Speicherort des Arbeitsbereichs, nicht auf den Arbeitsbereichsordner selbst. Die Variable${workspaceFolder}kann verwendet werden, um einen Pfad relativ zum Arbeitsbereichsordner anzugeben (zum Beispiel${workspaceFolder}/.vscode/browse.vc.db).
Eigenschaften für rekursive Includes
-
reduce: Wenn ein rekursiverincludePath-Eintrag expandiert wird, kann dies zu einer sehr großen Menge an Include-Pfaden führen, die IntelliSense beim Auflösen von#include-Anweisungen in Ihren Quelldateien verarbeiten muss. Das Senden einer großen Menge an Include-Pfaden an den IntelliSense-Compiler kann sich auf einigen Systemen auf die Leistung von IntelliSense auswirken. Standardmäßig reduziert die Erweiterung die Menge der Include-Pfade auf das kleinstmögliche Set, indem sie zuerst die Quelldateien nach#include-Anweisungen durchsucht, um zu bestimmen, welche Include-Pfade benötigt werden. Dieser Reduzierungsprozess entspricht dem Verhalten deralways-Option für diese Einstellung. Dieses Verhalten erkauft sich den anfänglichen Mehraufwand dadurch, dass IntelliSense später potenziell schneller ist. Das Setzen dieser Eigenschaft aufneverstellt dem IntelliSense-Prozess die vollständige rekursive Expansion der Include-Pfade zur Verfügung. Da keine Dateien vorab geparst werden, tauscht dieses Verhalten die potenzielle spätere Leistung gegen eine schnellere Startzeit von IntelliSense beim Öffnen von Quelldateien ein. Im Allgemeinen kann die Reduzierung der Anzahl rekursiver Include-Pfade in Ihrer Konfiguration die IntelliSense-Leistung verbessern, wenn eine große Anzahl von Pfaden beteiligt ist. -
priority: Die Priorität der Suche in rekursiven Include-Pfaden beim Auflösen von#include-Anweisungen. Wenn aufbeforeSystemIncludesgesetzt, werden die rekursiven Include-Pfade vor den System-Include-Pfaden durchsucht. Wenn aufafterSystemIncludesgesetzt, werden die rekursiven Include-Pfade nach den System-Include-Pfaden durchsucht.beforeSystemIncludeswürde die Suchreihenfolge eines Compilers genauer widerspiegeln und zu mehr Vorhersehbarkeit führen, währendafterSystemIncludeszu einer verbesserten Leistung führen könnte. -
order: Ob Unterverzeichnisse von rekursiven IncludesbreadthFirst(breitensuchend) oderdepthFirst(tiefensuchend) durchsucht werden.
Unterstützte Variablen
Sie können tasks.json oder launch.json erlauben, die aktuell aktive Konfiguration aus c_cpp_properties.json abzufragen. Verwenden Sie dazu die Variable ${command:cpptools.activeConfigName} als Argument in einem tasks.json- oder launch.json-Skript.
Standard-VS-Code-Einstellungen
Alle Standard-VS-Code-Einstellungen, wie C_Cpp.default.includePath, werden in c_cpp_properties.json unterstützt. Die einzige Ausnahme ist:
C_Cpp.default.systemIncludePath : string[]
Diese Einstellung ermöglicht es Ihnen, den System-Include-Pfad getrennt vom Include-Pfad anzugeben. Der ausgewählte System-Include-Pfad, den die C++-Erweiterung vom Compiler erhält, wird jedoch nicht an den IntelliSense-Prozess weitergegeben. Dies wird nur in seltenen Szenarien verwendet, da es das Standard-Compiler-Verhalten überschreibt, zum Beispiel wenn Ihr Compiler nicht unterstützt wird. Verwenden Sie stattdessen die Einstellung compilerArgs und das Flag -isystem, um System-Header anzugeben; dies ist in den meisten Szenarien die bessere Lösung.