web-dev-qa-db-fra.com

Comment définir des macros pour le moteur C ++ intellisense?

Lorsque vous utilisez le "Default" moteur intellisense, certains des symboles de mon projet C++ ne peuvent pas être résolus. Il s'avère que c'est parce qu'ils sont dans des en-têtes où ils sont gardés par un #ifdef qui dépend d'une macro passée à gcc avec le -D flag par le makefile. Comment puis-je informer le moteur intellisense de ces définitions afin qu'il puisse compiler ces parties de l'en-tête?

13
Kamil Kisiel

Le makefile du projet defines est défini dans .vscode/c_cpp_properties.json.

"configurations": [
{
   ...
   "defines":[
       "MYSYMBOL",
       "MYVALUE=1"
   ]
}
], ...

Voici quelques méthodes pour ouvrir c_cpp_properties.json:

  1. Trouvez un gribouillis vert sur quelque chose comme une déclaration d'inclusion qu'Intellisense ne peut pas résoudre. Survolez et cliquez sur l'ampoule qui apparaît (qui est minuscule et un peu un jeu à cliquer). Il ouvrira le fichier de configuration du projet dans l'éditeur.

  2. Comme ci-dessus, mais placez le curseur sur la ligne verte du gribouillis et appuyez sur Ctrl + ..

  3. Utilisez la palette de commandes: ctrl + shift + P, puis sélectionnez C/C++: Edit configurations (JSON).

  4. Si le fichier existe déjà dans votre dossier .vscode, ouvrez-le avec File-> Open.

Bien que vscode retraite les paramètres après la modification de c_cpp_properties.json, J'ai constaté qu'un redémarrage est parfois nécessaire lors de la modification des valeurs.

Il y a des informations de base et incomplètes ici: https://code.visualstudio.com/docs/languages/cpp

Il s'agit d'un bon lien sur le fichier c_cpp_properties.json Lui-même: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

8
jws

Cette fonctionnalité a maintenant été ajoutée: https://github.com/Microsoft/vscode-cpptools/issues/304

vous pouvez définir des "définitions" dans votre fichier c_cpp_properties.json

1
Daniel

Jusqu'à présent, les autres réponses ont deux problèmes qui ne semblent pas triviaux à résoudre:

  1. Il peut y avoir des moments où différents fichiers source nécessitent différents drapeaux de compilation.

  2. Il peut être péniblement fastidieux de déterminer manuellement les indicateurs de compilation nécessaires et de les ajouter manuellement.

Heureusement, l'extension C/C++ de VS Code prend en charge une base de données compile_commands.json. Cela stocke des informations spécifiques à chaque fichier source individuel, y compris les définitions, les répertoires d'inclusion et d'autres indicateurs de ligne de commande du compilateur. Je viens de publier une description plus détaillée de la façon d'en générer un et d'obtenir VS Code pour l'utiliser ici: https://stackoverflow.com/a/59618515/12663912

0
dutchkin