2 votes

KDevelop ne voit pas les fichiers d'en-tête C++

J'ai un projet C++ constitué de plusieurs bibliothèques partagées. Le code source de chaque bibliothèque est placé sous son sous-arbre de répertoires. Le fichier CMakeList principal contient une liste de directives add_subdirectory(). Les fichiers CMakeList dans chaque sous-répertoire contiennent des définitions comme le suivant:

set (SOURCE_FILES 
     util/src/Connector.cpp
     pub/util/Connector.h
)

add_library(channels SHARED $( SOURCE_FILES))
SET_TARGET_PROPERTIES(channels  PROPERTIES LINKER_LANGUAGE CXX)

channels est le nom du sous-répertoire.

Bien que le chemin de recherche pour les fichiers d'inclusion soit correctement défini et que la compilation fonctionne, KDevelop ne voit pas le fichier d'en-tête Connector.h et, par conséquent, son analyse et son navigateur de code/classe ne fonctionnent pas.

Je sais que le fichier .kdev_include_paths dans chaque répertoire pourrait résoudre le problème. Malheureusement, cette approche ne peut pas être utilisée en raison de quelques contraintes supplémentaires dans notre environnement de développement.

Existe-t-il une autre façon de résoudre ce problème?

J'utilise le compilateur Intel C/C++ sur RHEL 7.1 avec KDevelop 5.0.4 exécuté depuis l'AppImage.

1voto

Nick Hockings Points 21

J'ai trouvé et résolu un problème qui se présentait de manière similaire - les fichiers d'en-tête n'étaient pas visibles et le navigateur de code/classe échouait. La cause s'est avérée être une erreur dans mon code. Pour le bénéfice d'autres personnes qui pourraient rencontrer un bug similaire et arriver sur cette page, voici ce que j'ai mal fait :

J'avais une classe uniquement d'en-tête dans un fichier 'myClass.hpp' et une implémentation vide 'myClass.cpp'. Mon fichier CmakeLists.txt citait l'implémentation, mais mon implémentation ne contenait pas de #include "myClass.hpp". L'effet dans Kdevelop-5.1.0 était que le fichier d'en-tête n'était pas analysé comme faisant partie du programme - donc ses inclusions n'étaient pas lues, et une grande partie du code échouait à l'analyse sémantique.

0voto

OutOfBound Points 1331

Essayez d'ajouter

include_directories(${SOURCE_FILES})

0voto

S.P. Points 1

Il semble que j'ai rencontré le même problème. Symptômes: -- Kdevelop 5.1.2 ne parvenait pas à trouver certains #includes ; ils étaient soulignés dans les fichiers source. -- Il n'y avait aucun problème pour construire le projet Cause: -- À la fois les liens symboliques et les fichiers *.h originaux étaient dans les chemins spécifiés dans include_directories( ) dans CMakeLists.txt. La suppression du lien symbolique a résolu le problème.

Il est probable que Kdevelop soit perdu face à plusieurs fichiers *.h avec le même nom. Peut-être qu'une future version de Kdevelop pourra reconnaître qu'il ne traite qu'une seule cible.

0voto

Sur KDevelop 5 ceci a résolu mon problème :

  • Allez dans le menu "Projet" -> "Ouvrir la configuration..."
  • Dans la fenêtre qui s'ouvre, allez à "Cppcheck" sur sa gauche et ensuite à "Répertoires d'inclusion" sur sa droite
  • cochez l'option "Utiliser les répertoires d'inclusion du 'système'":

Voici une capture d'écran de cette fenêtre d'options

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