92 votes

Visual Studio Code includePath

J'essaie de construire C/C++ dans Visual Studio Code. J'ai installé C/C++ et toutes les extensions pertinentes.

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

Mais il y a une ligne verte sous #include <stdio.h> disant "Add include path to settings". Lorsque je clique dessus, il passe à "c_cpp_properties.json".

Comment et où puis-je ajouter des chemins d'inclusion dans les configurations ci-dessous ?

"configurations": [
    {
        "name": "Mac",
        "includePath": ["/usr/include"]
    }
]

68voto

Niall Points 6133

Un point de vue plus actuel sur la situation. Au cours de l'année 2018, l'extension C++ a ajouté une autre option à la configuration. compilerPath de la c_cpp_properties.json fichier ;

compilerPath (facultatif) Le chemin absolu vers le compilateur que vous utilisez pour construire votre projet. L'extension interrogera le compilateur pour déterminer les chemins d'inclusion du système et les définitions par défaut à utiliser pour IntelliSense.

Si elle est utilisée, la includePath ne serait pas nécessaire puisque l'IntelliSense utilisera le compilateur pour déterminer les chemins d'inclusion du système.


A l'origine,

Comment et où puis-je ajouter des chemins d'inclusion dans les configurations ci-dessous ?

La liste est un tableau de chaînes, donc l'ajout d'un chemin d'inclusion ressemblerait à quelque chose comme ;

"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"
        ]
    }
]

Source ; blog cpptools 31 mars 2016 .

La source liée a un gif montrant le format pour la configuration Win32, mais la même chose s'applique aux autres.

L'exemple ci-dessus inclut le chemin du SDK (OSX 10.11) si Xcode est installé. .

Note Je trouve que la mise à jour peut prendre un certain temps une fois que le chemin d'inclusion a été modifié.

L'extension cpptools peut être trouvé ici .

Une documentation supplémentaire (de Microsoft) sur la prise en charge du langage C++ dans VSCode peut être consultée à l'adresse suivante trouvé ici .


Dans un souci de préservation (de la discussion), voici des extraits de base du contenu du fichier tasks.json pour compiler et exécuter un fichier C++ ou un fichier C. Ils autorisent les espaces dans le nom du fichier (ce qui nécessite d'échapper les guillemets supplémentaires dans le fichier json en utilisant la commande \" ). Le shell est utilisé comme le coureur permettant ainsi la compilation ( clang... ) et l'exécution ( && ./a.out ) du programme. Il suppose également que le fichier tasks.json "vit" dans l'espace de travail local (sous le répertoire .vscode). D'autres détails du fichier task.json, tels que les variables supportées, etc. peuvent être consultés à l'adresse suivante trouvé ici .

Pour le 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"]
}

Pour 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... 
}

0 votes

0 votes

@stdio.h. Je recommande un bon livre sur le C pour approfondir le langage ; il existe une liste sur SO à l'adresse suivante stackoverflow.com/q/562303/3747990 . Si vous êtes intéressé, il existe également une liste C++ ; stackoverflow.com/q/388242/3747990 . Ces deux listes contiennent au moins un livre disponible en ligne qui vous permettra d'être opérationnel et fournira un excellent contexte pour beaucoup d'autres documents que vous trouverez sur SO et d'autres sites de didacticiels. J'aime ces listes parce qu'il s'agit de listes sélectionnées et non pas d'une liste aléatoire trouvée sur Internet.

5 votes

Je veux juste ajouter que j'ai trouvé les instructions pour créer les c_cpp_properties.json, tasks.json et launch.json ici. code.visualstudio.com/docs/languages/cpp

47voto

Vitox Points 2168

Pour tous ceux qui tombent de google, ici, c'est le correctif pour VSCode 1.40 (2019) :

Ouvrez le fichier settings.json global : Fichier > Préférences > Paramètres

Open the global settings.json: File > Preferences > Settings

Sélectionnez ensuite l'onglet "Utilisateur", ouvrez la section "Extensions", cliquez sur "C/C++". Faites ensuite défiler le panneau de droite jusqu'à ce que vous trouviez un bouton 'Edit in settings.json'.

Then select the tab 'User', open the section 'Extensions', click on 'C/C++'. Then scroll the right panel till you find a 'Edit in settings.json' button.

Enfin, vous ajoutez la section "C_Cpp.default.includePath". Le code fourni ici provient de mon propre système (Windows 7). Vous pouvez l'utiliser comme base pour vos propres chemins de bibliothèques. (N'oubliez pas de changer le YOUR USERNAME à votre système correct (dans mon cas Windows) nom d'utilisateur)
_(info d'édition : Il y a un problème avec la récursion de mon approche. VSCode n'aime pas les définitions multiples pour la même chose. Je l'ai résolu avec "C_Cpp.intelliSenseEngine": "Tag Parser" )_

Last, you add the "C_Cpp.default.includePath" section. The code provided there is from my own system (Windows 7). You can use it as a base for your own libraries paths. (Remember to change the YOUR USERNAME to your correct system (my case windows) username)

le code avant la ligne 7, sur le settings.json n'a rien à voir avec arduino ou includePath. Vous ne devez pas le copier...

Section JSON à ajouter au fichier 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"

0 votes

Cela n'enlève rien au fait qu'il faut souligner #include <mysql.h> dans mon cas, changer settings.json à : "C_Cpp.default.includePath": ["C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include\\**"]

0 votes

Bonjour @Lorenz. Etes-vous sûr que le chemin vers le(s) fichier(s) d'en-tête ( *.h ) est correct ? Êtes-vous sûr qu'il se trouve dans le dossier "Program Files" et non dans "Program Files (x86)" ? En outre, les barres obliques devraient être les / et non le backslash ``.

0 votes

Bonjour @Vitox, oui, le chemin est correct, c'est un connecteur installé en externe pour mariadb. Le slash est le même que le \\ sous Windows (\ est un échappement, donc j'échappe \ pour le voir réellement). Cela fonctionne vraiment. Le linting a disparu lorsque j'ai changé le includePath dans c_cpp_properties.json à la place (autres réponses). J'ai documenté ceci ici : stackoverflow.com/questions/1985764/ Peut-être s'agit-il également d'un cas particulier ? Parce que sans ajouter le chemin include et lib comme arguments, il ne compilera pas de toute façon, avec ou sans linting.

17voto

ryenus Points 679

Pour les utilisateurs de Mac qui n'ont que Outils en ligne de commande au lieu de Xcode vérifiez le /Library/Developer/CommandLineTools par exemple: :

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

Vous devrez probablement ajuster le chemin si vous avez installé une version différente de Command Line Tools.

Note : Vous pouvez également ouvrir/générer le c_cpp_properties.json par l'intermédiaire du C/Cpp: Edit Configurations dans la palette de commande (P).

0 votes

Dans le fichier c_cpp_properties.json actuel, il est indiqué en haut du fichier : " !!! WARNING ! !!": "VEUILLEZ NE PAS MODIFIER CE FICHIER ! USE docs.platformio.org/page/projectconf/ " J'ai également confirmé que lorsque l'on ajoute des références à ce fichier, elles peuvent être supprimées.

9voto

regomodo Points 125

Dans vos paramètres d'utilisateur, ajoutez :

"C_Cpp.default.includePath":["path1","path2"]

3 votes

Ceci, avec les chemins fournis dans d'autres réponses, plus ' ** ' ajouté à la fin, a fait l'affaire ! (ex : "C_Cpp.default.includePath" : [ "C:/Users/Administrator/Documents/Arduino/libraries/**" ] )

0 votes

@Votox La vraie réponse à cette question !

0 votes

Pour ma part, sur Mac, je devais être précis quant à l'emplacement du fichier d'en-tête, je ne pouvais pas encapsuler avec un fichier * pour l'ensemble du dossier. Par exemple, j'avais besoin d'un fichier d'en-tête ; j'ai dû spécifier le dossier des en-têtes pour que VSCode le trouve : "C_Cpp.default.includePath":[ "/Users/Github/Learning/Cpp_repo/FreeStore/header/"

3voto

100rabh Points 56

Cette réponse est peut-être tardive mais je viens de résoudre le problème. Voici mon fichier 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

}

0 votes

compilerPath est la meilleure solution. Vous devez supprimer les chemins d'inclusion du système de la section includePath propriété.

0 votes

Où se trouve ce fichier sur le disque ?

0 votes

@Bob Brown : Je n'ai pas résolu le problème avec le compilerPath, et je ne sais pas du tout comment cela devrait fonctionner. J'utilise MinGW sous Windows, le compilerPath a besoin de mingw et est une chaîne unique. La documentation officielle ne fait référence à includePath que dans c_cpp_configurations.json : Vous ne devez ajouter au paramètre Include path array que si votre programme inclut des fichiers d'en-tête qui ne se trouvent pas dans votre espace de travail ou dans le chemin de la bibliothèque standard. Voir : code.visualstudio.com/docs/cpp/config-msvc Ainsi, la raison pour laquelle cette réponse a été qualifiée d'inutile est plutôt qu'elle répète la réponse ci-dessus, mais elle est toujours juste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X