Question

Des bonnes suggestions ?L'entrée sera le nom d'un fichier d'en-tête et la sortie doit être une liste (de préférence une arborescence) de tous les fichiers l'incluant directement ou indirectement.

Était-ce utile?

La solution

Si vous avez accès à GCC/G++, alors le -M option affichera la liste des dépendances.Il ne fait aucune des choses supplémentaires que font les autres outils, mais comme il provient du compilateur, il n'y a aucune chance qu'il récupère les fichiers au "mauvais" endroit.

Autres conseils

Merci à KeithB.J'ai recherché la documentation pour cl.exe (VS2008) et trouvé l'indicateur /showIncludes.Depuis l'EDI, cela peut être défini à partir de la page de propriétés de n'importe quel fichier CPP.

Screen shot

Pour une solution lourde, vous devriez vérifier doxygène.Il analyse votre base de code et crée effectivement un site Web qui documente votre code.L’une des nombreuses choses qu’il montre est d’inclure des arbres.

Si vous cherchiez à pouvoir connecter la sortie de cet outil à un autre processus, cela pourrait ne pas fonctionner pour vous (bien que doxygen génère des sorties dans d'autres formats, je ne connais pas vraiment cette fonctionnalité).Si vous souhaitez simplement observer les dépendances, cela devrait très bien fonctionner.

J'ai joué avec un outil appelé cinclude2dot.Cela a été très utile pour maîtriser une base de code assez volumineuse lorsque je suis arrivé à travailler ici.En fait, j'ai finalement pensé à l'intégrer dans notre build quotidien.

Premièrement, cinclude2dot.pl est un script Perl qui analyse le code C/C++ et produit un graphique de dépendances #include sous forme de fichier de points à saisir dans graphviz.

http://www.flourish.org/cinclude2dot/

Si vous ne voulez pas emprunter la voie de ce type d'outil manuel, alors le gagnant de loin est, à mon avis, un outil connu sous le nom de "IncludeManager" de ProFactor.

http://www.profactor.co.uk/includemanager.php

Il y a un essai gratuit, et c'est génial.Il s'agit d'un plug-in pour Visual Studio totalement intégré, donc un double-clic sur quelque chose ici vous amène à l'endroit où il est inclus là-bas.

Les survols d'info-bulles vous donnent toutes les informations que vous souhaitez, et vous permettent d'explorer vers le bas/vers le haut, de supprimer des sous-arbres entiers qui ne vous intéressent pas, d'afficher des représentations autres que des graphiques, de parcourir une liste de correspondances pour ceci et cela, c'est merveilleux.

Si vous êtes rapide, vous pouvez refactoriser la structure #include d'un grand projet avant la fin de l'essai.Malgré tout, cela ne coûte pas cher, environ 35 $ par licence.

Pour ce qu’il fait, c’est presque parfait.Non seulement les graphiques #include, mais aussi les dépendances entre projets des fichiers partagés, l'impact sur les temps de construction, les propriétés détaillées dans les grilles, parfait.

Bonnes nouvelles: Redhat Source-Navigateur (fonctionne également sous Windows).Bien sûr, les commutateurs du compilateur (mentionnés précédemment) ont une analyse supérieure et je ne sais pas comment cela gérera MFC, Qt et leurs mots-clés magiques.

redhat Source-Navigator

Bâtir sur Réponse de KeithB, voici la syntaxe GNUmake pour automatiquement 1) générer les fichiers de dépendances, 2) les maintenir à jour et 3) les utiliser dans votre makefile :

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(Assurez-vous de remplacer ces retraits par des onglets durs.)

Comprendre le C++ je devrais pouvoir t'aider :il construit une base de données à laquelle vous pouvez accéder depuis Perl.

cscope (http://cscope.sourceforge.net/) fait cela dans un xterm autonome et peut également être utilisé dans votre éditeur préféré - il offre un excellent support pour Emacs et vi/vim.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top