ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Referenz zu den C++-Erweiterungseinstellungen

Die C++-Erweiterungseinstellungen sind hochgradig 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 den 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-Snippet ist eine Beispielkonfiguration für c_cpp_properties.json. Sie müssen nur relevante Variablen in Ihre JSON-Datei aufnehmen, und fehlende Felder werden von der C++-Erweiterung 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: Eine Liste von benutzerspezifischen Variablen, die für die Substitution in den Konfigurationen über die Standard-Umgebungsvariablensyntax verfügbar sind: ${<var>} oder ${env:<var>}. Strings und Listen von Strings werden akzeptiert.

  • configurations: Eine Liste von Konfigurationsobjekten, die der IntelliSense-Engine Informationen über Ihr Projekt und Ihre Präferenzen liefern. Standardmäßig erstellt die Erweiterung eine Konfiguration für Sie, die auf Ihrem Betriebssystem basiert. Sie können auch weitere Konfigurationen hinzufügen.

  • version: Wir empfehlen, dieses Feld nicht zu bearbeiten. Es verfolgt die aktuelle Version der Datei c_cpp_properties.json, damit die Erweiterung weiß, welche Eigenschaften und Einstellungen vorhanden sein sollen und wie diese Datei auf die neueste Version aktualisiert werden soll.

  • enableConfigurationSquiggles: Auf true setzen, um Fehler, die in der Datei c_cpp_properties.json erkannt wurden, an die C++-Erweiterung zu melden.

Konfigurationseigenschaften

  • name: Ein benutzerfreundlicher Name, der eine Konfiguration identifiziert. Linux, Mac und Win32 sind spezielle Bezeichner für Konfigurationen, die auf diesen Plattformen automatisch ausgewählt werden. Die Statusleiste in VS Code zeigt Ihnen, welche Konfiguration aktiv ist. Sie können auch die Bezeichnung 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 eine genauere IntelliSense-Funktionalität zu ermöglichen. Die Erweiterung fragt den Compiler ab, um die systemseitigen Include-Pfade und Standarddefinitionen für IntelliSense zu ermitteln.

    Wenn "compilerPath": "" (leerer String) angegeben wird, wird die Abfrage eines Compilers übersprungen. Dies ist nützlich, wenn Ihr bevorzugter Compiler die für die Abfrage verwendeten Argumente nicht unterstützt, da die Erweiterung auf unterstützte Compiler zurückgreift, die sie finden kann (z. B. MSVC). Das Weglassen der Eigenschaft compilerPath überspringt die Abfrage nicht.

  • compilerArgs: Compiler-Argumente zur Änderung der verwendeten Include-Pfade oder Definitionen, z. B. -nostdinc++, -m32 usw. Argumente, die zusätzliche durch Leerzeichen getrennte Argumente benötigen, sollten als separate Argumente im Array angegeben werden, z. B. für --sysroot <arg> verwenden Sie \"--sysroot\", \"<arg>\".

  • intelliSenseMode: Der zu verwendende IntelliSense-Modus, der einer Architekturspezifischen Variante von MSVC, GCC oder Clang zugeordnet ist. Wenn nicht gesetzt oder auf ${default} gesetzt, wählt die Erweiterung den Standardwert für die jeweilige Plattform.

    Plattformstandardwerte

    • 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 die <platform>-<compiler>-<architecture>-Varianten basierend auf der Host-Plattform konvertiert.

  • includePath: Ein Include-Pfad ist ein Verzeichnis von Header-Dateien, die von einer Quelldatei eingebunden werden. Zum Beispiel enthält eine Quelldatei die Include-Anweisung #include "myHeaderFile.h", wobei der Pfad dieser Header-Datei zu includePath hinzugefügt wird. Geben Sie eine Liste von Pfaden an, die die IntelliSense-Engine beim Suchen nach eingebundenen Header-Dateien verwenden soll. Die Suche auf diesen Pfaden ist nicht rekursiv. Geben Sie /** am Ende des Pfades an, um eine rekursive Suche zu kennzeichnen. Zum Beispiel durchsucht ${workspaceFolder}/** alle Unterverzeichnisse, während ${workspaceFolder} dies nicht tut. Wenn Sie sich unter Windows mit installiertem Visual Studio befinden oder wenn ein Compiler in der Einstellung compilerPath angegeben ist, sollten die systemseitigen Include-Pfade hier nicht aufgeführt werden.

  • defines: Eine Liste von Präprozessordefinitionen, 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 Beispiel c17, gnu23 oder ${default}. Hinweis: GNU-Standards werden nur verwendet, um den eingestellten 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 Beispiel c++20, gnu++23 oder ${default}. Hinweis: GNU-Standards werden nur verwendet, um den eingestellten 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 zum Beispiel die VS-Code-Erweiterungs-ID ms-vscode.cmake-tools, um Konfigurationsinformationen von der CMake-Tools-Erweiterung bereitzustellen. Wenn Sie einen configurationProvider angegeben haben, hat die von ihm bereitgestellte Konfiguration Vorrang vor Ihren anderen Einstellungen in c_cpp_properties.json.

    Eine Kandidaten-Erweiterung für configurationProvider muss die vscode-cpptools-api implementieren.

  • mergeConfigurations: Auf true setzen, um Include-Pfade, Definitionen und erzwungene Includes mit denen eines Konfigurationsanbieters zusammenzuführen.

  • windowsSdkVersion: Die Version des Windows SDK-Include-Pfads, der unter Windows verwendet werden soll, z. B. 10.0.17134.0.

  • macFrameworkPath: Eine Liste von Pfaden, die die IntelliSense-Engine beim Suchen nach eingebundenen Headern von Mac-Frameworks verwenden soll.

  • forcedInclude: Eine Liste von Dateien, die einbezogen werden sollen, bevor irgendein Text in der Quelldatei verarbeitet wird. Die Dateien werden in der angegebenen Reihenfolge einbezogen.

  • compileCommands: Eine Liste von Pfaden, die den vollständigen Pfad zur Datei compile_commands.json für den Arbeitsbereich enthalten. Wenn ein übereinstimmender Eintrag in compile_commands.json für eine im Editor geöffnete Datei vorhanden ist, wird diese Kommandozeile zur Konfiguration von IntelliSense für diese Datei verwendet, anstelle der anderen Felder von c_cpp_properties.json. Weitere Informationen zum Dateiformat finden Sie in der Clang-Dokumentation. Einige Buildsysteme wie CMake vereinfachen die Generierung 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 benötigt werden. 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 in launch.json oder tasks.json zu verwenden.

  • browse: Der Satz von 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, globale Symbolsuche oder wenn die "Standard"-IntelliSense-Engine die #includes in Ihren Quelldateien nicht auflösen kann, verwendet.

  • recursiveIncludes: Ein Satz von Eigenschaften, die konfiguriert, wie die Erweiterung einen includePath-Eintrag verarbeitet, der eine rekursive Suche angibt.

Durchsuchen-Eigenschaften

  • path: Eine Liste von Pfaden, deren Quelldateien geparst werden, um sie in globalen Symbolsuchvorgängen zu verwenden. Wenn weggelassen, wird includePath als path verwendet. Die Suche auf diesen Pfaden ist standardmäßig rekursiv. Geben Sie * an, um eine nicht-rekursive Suche zu kennzeichnen. Zum Beispiel durchsucht ${workspaceFolder} alle Unterverzeichnisse, während ${workspaceFolder}/* dies nicht tut.

  • limitSymbolsToIncludedHeaders: Wenn true, parst der Tag-Parser nur Header-Dateien, die direkt oder indirekt von einer Quelldatei in ${workspaceFolder} enthalten sind. Wenn false, parst der Tag-Parser alle Dateien, die in den Pfaden gefunden werden, die in der Liste browse.path angegeben sind.

  • databaseFilename: Der Pfad zur generierten Symboldatenbank. Diese Eigenschaft weist die Erweiterung an, die Arbeitsbereich-Symboldatenbank an einem anderen Ort als dem Standardspeicherort des Arbeitsbereichs zu speichern. Wenn ein relativer Pfad angegeben wird, wird er relativ zum Standardspeicherort des Arbeitsbereichs gemacht, nicht zum Arbeitsbereichsordner selbst. Die Variable ${workspaceFolder} kann verwendet werden, um einen Pfad relativ zum Arbeitsbereichsordner anzugeben (z. B. ${workspaceFolder}/.vscode/browse.vc.db)

Rekursive Include-Eigenschaften

  • reduce: Wenn ein rekursiver includePath-Eintrag erweitert wird, kann dies zu einer sehr großen Anzahl von Include-Pfaden führen, die die IntelliSense-Engine bei der Auflösung von #include-Anweisungen in Ihren Quelldateien verarbeiten muss. Das Senden einer großen Anzahl von Include-Pfaden an den IntelliSense-Compiler kann die Leistung von IntelliSense auf einigen Systemen beeinträchtigen. Standardmäßig reduziert die Erweiterung die Anzahl der Include-Pfade auf die kleinstmögliche Menge, indem sie zuerst die Quelldateien per Tag-Parsing durchsucht, um #include-Anweisungen zu finden und zu bestimmen, welche Include-Pfade benötigt werden. Dieser Reduktionsprozess entspricht dem Verhalten der Option always für diese Einstellung. Dieses Verhalten tauscht einen gewissen anfänglichen Mehraufwand gegen eine möglicherweise schnellere IntelliSense-Leistung später ein. Wenn Sie diese Eigenschaft auf never setzen, wird die vollständige rekursive Erweiterung der Include-Pfade an den IntelliSense-Prozess gesendet. Durch das Nicht-Parsen von Dateien im Voraus tauscht dieses Verhalten potenzielle Leistungseinbußen später gegen eine schnellere IntelliSense-Startzeit beim Öffnen von Quelldateien ein. Im Allgemeinen kann die Reduzierung der Anzahl von rekursiven Include-Pfaden in Ihrer Konfiguration die IntelliSense-Leistung bei einer großen Anzahl von Pfaden verbessern.

  • priority: Die Priorität von rekursiven Include-Pfad-Suchen bei der Auflösung von #include-Anweisungen. Wenn auf beforeSystemIncludes gesetzt, werden die rekursiven Include-Pfade vor den systemseitigen Include-Pfaden durchsucht. Wenn auf afterSystemIncludes gesetzt, werden die rekursiven Include-Pfade nach den systemseitigen Include-Pfaden durchsucht. beforeSystemIncludes würde die Suchreihenfolge eines Compilers genauer widerspiegeln und zu mehr Vorhersehbarkeit führen, während afterSystemIncludes zu einer verbesserten Leistung führen könnte.

  • order: Ob Unterverzeichnisse von rekursiven Includes breadthFirst (breitenorientiert) oder depthFirst (tiefenorientiert) durchsucht werden.

Unterstützte Variablen

Sie können zulassen, dass tasks.json oder launch.json die aktuelle aktive Konfiguration aus c_cpp_properties.json abfragen. 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 systemseitigen Include-Pfad separat vom Include-Pfad anzugeben. Der ausgewählte systemseitige Include-Pfad, den die C++-Erweiterung vom Compiler erhält, wird jedoch nicht an den IntelliSense-Prozess weitergeleitet. Dies wird nur in seltenen Szenarien verwendet, da es das Standardverhalten des Compilers überschreibt, z. B. wenn Ihr Compiler nicht unterstützt wird. Verwenden Sie stattdessen die Einstellung compilerArgs und das Flag -isystem, um System-Header anzugeben, was in den meisten Szenarien eine bessere Lösung ist.

© . This site is unofficial and not affiliated with Microsoft.