Visual Studio Code includePath

74

Ich versuche, C / C ++ in Visual Studio Code zu erstellen. Ich habe C / C ++ und alle relevanten Erweiterungen installiert.

#include <stdio.h>
int main() {
    printf("Test C now\n");
    return 0;
}

Es gibt jedoch eine grüne Linie unter #include <stdio.h>"Include-Pfad zu Einstellungen hinzufügen". Wenn ich darauf klicke, wechselt es zu "c_cpp_properties.json".

Wie und wo kann ich in den folgenden Konfigurationen Include-Pfade hinzufügen?

"configurations": [
    {
        "name": "Mac",
        "includePath": ["/usr/include"]
    }
]
stdio.h
quelle

Antworten:

56

Wie und wo kann ich in den folgenden Konfigurationen Include-Pfade hinzufügen?

Die Liste ist ein String-Array, daher würde das Hinzufügen eines Include-Pfads ungefähr so ​​aussehen.

"configurations": [
    {
        "name": "Mac",
        "includePath": ["/usr/local/include",
            "/path/to/additional/includes",
            "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include"
        ]
    }
]

Quelle; cpptools blog 31. März 2016 .

Die verknüpfte Quelle verfügt über ein GIF, das das Format für die Win32-Konfiguration anzeigt. Gleiches gilt jedoch auch für die anderen.

Das obige Beispiel enthält den SDK-Pfad (OSX 10.11), wenn Xcode installiert ist .

Hinweis Ich finde, dass die Aktualisierung eine Weile dauern kann, sobald der Include-Pfad geändert wurde.

Die Erweiterung cpptools finden Sie hier .

Weitere Dokumentation (von Microsoft) zur C ++ - Sprachunterstützung in VSCode finden Sie hier .


Im Jahr 2018 fügte die C ++ - Erweiterung der Konfiguration compilerPathder c_cpp_properties.jsonDatei eine weitere Option hinzu .

compilerPath(optional) Der absolute Pfad zum Compiler, mit dem Sie Ihr Projekt erstellen. Die Erweiterung fragt den Compiler ab, um die Systemeinschlusspfade und Standarddefinitionen für IntelliSense zu ermitteln.

Bei Verwendung wird das includePathnicht benötigt, da IntelliSense den Compiler verwendet, um die Systemeinschlusspfade zu ermitteln.


Aus Gründen der Aufbewahrung (aus der Diskussion) sind im Folgenden grundlegende Ausschnitte für den Inhalt der Datei task.json aufgeführt, mit denen entweder eine C ++ - oder eine C-Datei kompiliert und ausgeführt werden kann. Sie lassen Leerzeichen im Dateinamen zu (erfordert das Umgehen der zusätzlichen Anführungszeichen im json mit \"). Die Shell wird als Runner verwendet und ermöglicht so die Kompilierung ( clang...) und Ausführung ( && ./a.out) des Programms. Es wird auch davon ausgegangen, dass die Datei task.json im lokalen Arbeitsbereich (unter dem Verzeichnis .vscode) "lebt". Weitere task.json-Details wie unterstützte Variablen usw. finden Sie hier .

Für C ++;

{ 
    "version": "0.1.0", 
    "isShellCommand": true, 
    "taskName": "GenericBuild", 
    "showOutput": "always", 
    "command": "sh", 
    "suppressTaskName": false, 
    "args": ["-c", "clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"]
}

Für C;

{ 
    "version": "0.1.0", 
    "isShellCommand": true, 
    "taskName": "GenericBuild", 
    "showOutput": "always", 
    "command": "sh", 
    "suppressTaskName": false, 
    "args": ["-c", "clang -std=c11 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"] // command arguments... 
}
Niall
quelle
4
Ich möchte nur hinzufügen, dass ich die Anweisungen zum Erstellen von c_cpp_properties.json, task.json und launch.json hier gefunden habe. Code.visualstudio.com/docs/languages/cpp
agwntr
3
Beachten Sie, dass Sie /**für ein rekursives Include verwenden können : "includePath":[ "C:/path/to/all/includes/**" ].
Danijel
1
In neueren Versionen der C / C ++ - Erweiterung wird empfohlen, die compilerPathEigenschaft zum Festlegen der Systemeinschlüsse / -definitionen zu verwenden, anstatt sie der includePathEigenschaft hinzuzufügen .
Bob Brown
1
@ Wyck. Es ist eine Eigenschaft des Objekts der Datei c_cpp_properties.json .
Niall
1
@arkady. Es ist Teil der c_cpp_properties-Dateien. Wenn es nicht generiert wurde, können Sie selbst eines erstellen. Weitere Informationen finden
Niall
30

Für alle, die von Google abfallen, ist dies hier das Update für VSCode 1.40 (2019):

Öffnen Sie die Datei global settings.json: Datei> Einstellungen> Einstellungen

Öffnen Sie die Datei global settings.json: Datei> Einstellungen> Einstellungen

Wählen Sie dann die Registerkarte 'Benutzer', öffnen Sie den Abschnitt 'Erweiterungen' und klicken Sie auf 'C / C ++'. Scrollen Sie dann im rechten Bereich, bis Sie die Schaltfläche "In settings.json bearbeiten" finden.

Wählen Sie dann die Registerkarte 'Benutzer', öffnen Sie den Abschnitt 'Erweiterungen' und klicken Sie auf 'C / C ++'.  Scrollen Sie dann im rechten Bereich, bis Sie die Schaltfläche "In settings.json bearbeiten" finden.

Zuletzt fügen Sie den Abschnitt "C_Cpp.default.includePath" hinzu. Der dort bereitgestellte Code stammt von meinem eigenen System (Windows 7). Sie können es als Basis für Ihre eigenen Bibliothekspfade verwenden. (Denken Sie daran, den YOUR USERNAMEBenutzernamen auf Ihr korrektes System (meine Fallfenster) zu ändern. )
(Informationen bearbeiten: Es gibt ein Problem mit der Rekursion meines Ansatzes. VSCode mag nicht mehrere Definitionen für dieselbe Sache. Ich habe es mit gelöst. "C_Cpp.intelliSenseEngine": "Tag Parser")

Zuletzt fügen Sie den Abschnitt "C_Cpp.default.includePath" hinzu.  Der dort bereitgestellte Code stammt von meinem eigenen System (Windows 7).  Sie können es als Basis für Ihre eigenen Bibliothekspfade verwenden.  (Denken Sie daran, IHREN BENUTZERNAME in den korrekten Benutzernamen des Systems (meine Fallfenster) zu ändern.)

Der Code vor Zeile 7 in der Datei settings.json hat nichts mit arduino oder includePath zu tun. Sie dürfen das nicht kopieren ...

JSON-Abschnitt zum Hinzufügen zu settings.json:

"C_Cpp.default.includePath": [
        "C:/Program Files (x86)/Arduino/libraries/**",
        "C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino/**",
        "C:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include/**",
        "C:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/5.4.0/include/**",
        "C:/Program Files (x86)/Arduino/hardware/arduino/avr/variants/standard/**",
        "C:/Users/<YOUR USERNAME>/.platformio/packages/framework-arduinoavr/**",
        "C:/Users/<YOUR USERNAME>/Documents/Arduino/libraries/**",
        "{$workspaceFolder}/libraries/**",
        "{$workspaceFolder}/**"
    ],
"C_Cpp.intelliSenseEngine": "Tag Parser"
Vitox
quelle
Dies hat die Unterstreichung #include <mysql.h>in meinem Fall nicht settings.json"C_Cpp.default.includePath": ["C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include\\**"]
Lorenz
Hallo @Lorenz. Sind Sie sicher, dass der Pfad zu den Header-Dateien (* .h) korrekt ist? Sind Sie sicher, dass es sich im Ordner "Programme" und nicht stattdessen im Ordner "Programme (x86)" befindet? Außerdem sollten die Schrägstriche /derjenige sein und nicht der Backslash ``.
Vitox
Hallo @Vitox, ja, der Pfad ist korrekt, es ist ein extern installierter Anschluss für Mariadb. Der Schrägstrich ist der gleiche wie der \\ unter Windows (\ ist Escape, daher entkomme ich \, um ihn tatsächlich zu sehen). Das funktioniert definitiv. Das Flusen verschwand, als ich stattdessen den includePath in c_cpp_properties.json änderte (andere Antworten). Ich habe dies hier dokumentiert: stackoverflow.com/questions/1985764/… Vielleicht ist es auch ein Sonderfall? Denn ohne das Hinzufügen des Pfads include und lib als Argumente wird es ohnehin nicht kompiliert, mit oder ohne Flusen.
Lorenz
14

Überprüfen Sie für Mac-Benutzer, die nur Befehlszeilentools anstelle von Xcode haben , das /Library/Developer/CommandLineTools/Verzeichnis, z.

"configurations": [{
    "name": "Mac",
    "includePath": [
            "/usr/local/include",
            // others, e.g.: "/usr/local/opt/ncurses/include/",
            "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include",
            "${workspaceFolder}/**"
    ]
}]

Sie müssen den Pfad wahrscheinlich anpassen, wenn Sie eine andere Version der Befehlszeilentools installiert haben.

Hinweis : Sie können die c_cpp_properties.jsonDatei auch über den C/Cpp: Edit ConfigurationsBefehl in der Befehlspalette (⇧⌘P) öffnen / generieren .

Ryenus
quelle
In der aktuellen Datei c_cpp_properties.json steht oben in der Datei: "!!! WARNUNG !!!": "BITTE ÄNDERN SIE DIESE DATEI NICHT! VERWENDEN Sie docs.platformio.org/page/projectconf/… " I ' Wir haben auch bestätigt, dass beim Hinzufügen von Verweisen auf diese Datei diese entfernt werden können
CrazyMerlin
6

Fügen Sie in Ihren Benutzereinstellungen Folgendes hinzu:

"C_Cpp.default.includePath":["path1","path2"]
Regomodo
quelle
2
Dies, mit den Pfaden in anderen Antworten und '**' am Ende, hat den Trick getan! (Beispiel: "C_Cpp.default.includePath": ["C: / Benutzer / Administrator / Dokumente / Arduino / Bibliotheken / **"])
Vitox
@ Tox Die wahre Antwort darauf!
Degski
2

Der beste Weg, um die Standardheader für Ihr Projekt zu konfigurieren, besteht darin, die compilerPathEigenschaft auf die Konfigurationen in Ihrer c_cpp_properties.jsonDatei festzulegen. Es wird nicht empfohlen, der includePathEigenschaft Systemeinschlusspfade hinzuzufügen .

Eine andere Option, wenn Sie es vorziehen, nicht zu verwenden, c_cpp_properties.jsonist das C_Cpp.default.compilerPathFestlegen der Einstellung.

Bob Brown
quelle
Gibt es eine globale c_cpp_properties.json Datei? Ich scheine mich zu erinnern, dass es eine gab, unter ~/.vscode/oder vielleicht ~/.vscode-oss/(unter Linux); jetzt sehe ich keinen.
März 2377
Nein, es gibt keine globale c_cpp_properties.jsonDatei. Sie können die C_Cpp.default.*Einstellungen jedoch verwenden, um einen ähnlichen Effekt zu erzielen.
Bob Brown
Ich denke, dass diese Antwort einen verwirrenden Ausdruck verwendet, vielleicht ist es nur mein schlechtes Englisch? Ich fand das viel besser zu verstehen, indem ich hier den Kommentar von @Bob Brown in stackoverflow.com/questions/37522462/… kopierte : "In neueren Versionen der C / C ++ - Erweiterung wird empfohlen, die Eigenschaft compilerPath zu verwenden, um die Systemeinschlüsse / festzulegen definiert, anstatt sie der includePath-Eigenschaft hinzuzufügen. "
Lorenz
1

Diese Antwort ist vielleicht zu spät, aber ich habe das Problem gerade behoben. Hier ist meine Datei c_cpp_properties.json:

{
"configurations": [
    {
        "name": "Linux",
        "includePath": [
            "${workspaceFolder}/**",                
            "/usr/include/c++/5.4.0/",
            "usr/local/include/",
            "usr/include/"
        ],
        "defines": [],
        "compilerPath": "/usr/bin/gcc",
        "cStandard": "c11",
        "cppStandard": "c++14",
        "intelliSenseMode": "clang-x64"
    }
],
"version": 4

}}

100rabh
quelle
compilerPathist der Weg zu gehen. Sie sollten System-Include-Pfade aus der includePathEigenschaft entfernen .
Bob Brown
Wo befindet sich diese Datei auf der Festplatte?
März 2377
@ Bob Brown: Ich habe es nicht mit compilerPath gelöst und ich weiß nicht, wie das überhaupt funktionieren soll. Ich verwende MinGW unter Windows, der compilerPath benötigt mingw und ist eine einzelne Zeichenfolge. Die offizielle Dokumentation bezieht sich nur auf includePath in c_cpp_configurations.json: Sie müssen der Einstellung Include path array nur hinzufügen, wenn Ihr Programm Header-Dateien enthält, die sich nicht in Ihrem Arbeitsbereich oder im Standardbibliothekspfad befinden. Siehe: code.visualstudio.com/docs/cpp/config-msvc Warum diese Antwort als nicht sinnvoll bezeichnet wurde, ist eher, dass sie die obige Antwort wiederholt, aber immer noch richtig ist.
Lorenz
0

Ich habe dieses Problem gelöst, indem ich Visual Studio deinstalliert habe, das ich kürzlich installiert hatte.

Avi Kumar Singh
quelle
Ist dies der volle Umfang Ihrer Lösung? Was hast du stattdessen benutzt?
Nelles
Ja. Ich hatte Visual Studio über Visual Studio Code installiert, was meiner Meinung nach etwas mit VS Code zu tun hatte, da VSCode durch einfaches Deinstallieren von VS mit dem Ausführen und Debuggen von Code begann.
Avi Kumar Singh