web-dev-qa-db-fra.com

Code Visual Studio: chemin d'inclusion C++

J'utilise actuellement https://marketplace.visualstudio.com/items?itemName=mitaki28.vscode-clang , qui est un excellent outil pour accéder aux fonctions des membres. 

Cependant, j'ai un problème avec un projet que j'importe. Tandis que la fonctionnalité clang ci-dessus fonctionne, je rencontre un problème particulier avec l’utilisation des répertoires include. Ma structure de projet est la suivante:

|- src/
   |- main.cpp
|- include/
   |- MyHelper.h
|- CMakeLists.txt

Existe-t-il un moyen de configurer mes répertoires d'inclusion dans Visual Studio Code de telle sorte que, dans main.cpp, je puisse simplement faire: #include "MyHelper.h" au lieu de #include "include/MyHelper.h"? 

Dans l’éditeur, cela met en évidence ma déclaration d’inclusion indiquant qu’il est impossible de trouver le fichier. Bien que l'éditeur ne soit pas un gros problème (mon projet compile), le problème suivant est que le plug-in vscode-clang ne fonctionne pas car il ne voit pas le fichier.

Peut-être même qu’il utilise la configuration de mon CMakeLists.txt dans l’éditeur pour les inclusions nécessaires?

Merci!

5
Deftness

Ok, c'était idiot, mais dans le cas où quelqu'un utilise Visual Studio Code et n'a pas de projet trivial. Ces instructions supposent que vous utilisez le compilateur Clang:

  1. Ouvrez votre répertoire de projet
  2. Ouvrez .vscode/settings.json
  3. Configurez la ligne ci-dessous à l'intérieur de l'objet JSON:

    // Compiler options for C++ (e.g. ['-std=c++11'])
    "clang.cxxflags": [
        "-I/path/to/my/include/directory" // header files
    ],
    
5
Deftness

Si vous utilisez CMake, VSCode a des plugins CMake pour vous aider à construire le projet. Vous n’avez donc pas besoin de modifier le fichier settings.json. Il suffit d'utiliser:

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") 

Ou si aucun autre module n'utilise les fichiers d'en-tête dans ce dossier, vous pouvez utiliser quelque chose comme:

target_include_directories(MyHelper, "${CMAKE_CURRENT_SOURCE_DIR}/include") 

Si vous avez seulement besoin que le projet soit construit avec succès. C'est toute l'histoire. 

Dans ce cas, vous avez quelques petites lignes vertes en zigzag sous les déclarations #include qui vous font mal aux yeux. Vous devez générer c_cpp_properties.json. Cela n'a rien à voir avec d'aider le compilateur à construire le code, mais d'aider VSCode intellisense à réaliser l'existence de bibliothèques et de fichiers d'en-tête. Et encore une fois, vous pouvez utiliser CMake en ajoutant des options CMake dans le fichier CMakeLists.txt:

add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)

Le CMake va générer un fichier compile_commands.json sous votre répertoire de construction. Le VSCode est capable d'analyser le fichier Json et de trouver le chemin d'inclusion en fonction du contenu de ce fichier. Vous devez donc simplement indiquer à VSCode où se trouve le fichier Json. Vous pouvez le faire en ajoutant la ligne suivante dans le fichier c_cpp_properties.json:

 "configurations": [
        {
            "name": "Mac",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json",
            ...
        }],

Reconstruire le projet laissera le VSCode intellisense trouver tous les chemins nécessaires.

[Environnement]
Ubuntu: 16.04.3
VSCode: 1.23.1
Plugins VSCode: C/C++ 0.17.0, CMAKE 0.0.17, CMakeTools 0.11.1

1
r0ng