Outil pour suivre les dépendances #include [fermé]
175
Des bonnes suggestions? L'entrée sera le nom d'un fichier d'en-tête et la sortie devrait être une liste (de préférence un arbre) de tous les fichiers y compris directement ou indirectement.
Il ne s'agit pas d'un "favori", les inclusions sont bien montrées dans gcc, mais pas msvs. Nous (je) recherchons donc n'importe quel outil.
fantastique
70
Pourquoi est-ce que je continue de trouver des questions «hors sujet» si utiles?
jfritz42
5
@ jfritz42: Cela devrait recevoir le prix "Commentaire de l'année"! Comment un modérateur peut-il étiqueter une question «hors sujet» alors qu'il y a tant de sujets et tant d'utilisateurs?
Totoro le
2
Je voulais noter qu'il existe de nombreux autres outils pour gérer les #includedépendances telles que les dépendances cpp , iwyu et dep-matrix qui est un outil assez naïf écrit en python.
nonsensickle
3
@ jfritz42 Les chiffres sont clairs: 123 votes et 62 favoris. Beaucoup de gens le voient de cette façon. Normes SO bizarres. Je doute également que de telles questions aient les mêmes bonnes réponses sur SuperUser.
Andreas
Réponses:
148
Si vous avez accès à GCC / G ++, l' -Moption affichera la liste de dépendances. Il ne fait aucune des choses supplémentaires que font les autres outils, mais comme il vient du compilateur, il n'y a aucune chance qu'il récupère les fichiers au «mauvais» endroit.
Aussi avec l' -ooption, le compilateur va écrire la sortie dans un fichier au lieu de stdout.
Hi-Angel
2
@SamB Cela ne fonctionne que s'il n'y a pas d'erreurs et imprime à la stderrplace de stdout. Sinon, cette option est plus générale.
user877329
92
Merci à KeithB. J'ai recherché la documentation pour cl.exe (VS2008) et j'ai 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.
Ceci est extrêmement utile pour résoudre certaines erreurs / avertissements de compilation très difficiles. Merci beaucoup!
Ashwin Nanjappa
Ceci est également extrêmement pratique lorsque vous essayez d'optimiser les en-têtes précompilés!
fmuecke
Lorsque vous travaillez dans VS, je pense que c'est la solution la plus rapide pour résoudre mon problème ~ :-)
yaobin
Cela ne semble pas fonctionner, si un en-tête inclut un en-tête std c, par exemplemath.h
abergmeier
29
Pour une solution lourde, vous devriez consulter doxygen . Il scanne votre base de code et propose un site Web, efficacement, qui documente votre code. L'une des nombreuses choses qu'elle montre est l'inclusion des arbres.
Si vous cherchez à pouvoir brancher la sortie de cet outil dans un autre processus, cela peut ne pas fonctionner pour vous (bien que doxygen produise vers d'autres formats, je ne suis pas vraiment familier avec cette fonctionnalité). Si vous voulez simplement observer les dépendances, cela devrait fonctionner parfaitement.
J'ai joué avec un outil appelé cinclude2dot . C'était assez utile pour avoir une idée d'une base de code assez volumineuse lorsque je suis venu travailler ici. J'ai en fait pensé à l'intégrer dans notre version quotidienne.
Cet outil fonctionne exceptionnellement bien. J'ai eu des problèmes avec -M et doxygen de g ++.
sleeparrow
J'ai écrit un script python pour lire la sortie de cinclude2dot et obtenir toutes les dépendances dans une carte, puis effectuer une traversée en profondeur pour enfin générer une forêt de sources. La forêt qui ne contient aucun .cc/.c/.cxxfichier (seuls les .hfichiers qu'elle contient ) peut être redondante.
shuva
12
Tout d'abord, cinclude2dot.pl est un script perl qui analyse le code C / C ++ et produit un graphe de dépendances #include sous forme de fichier de points à saisir dans graphviz.
Si vous ne voulez pas suivre la voie de ce genre d'outil manuel, alors le gagnant de loin est à mon avis un outil connu sous le nom de "IncludeManager" de ProFactor.
Il y a un essai gratuit et c'est génial. C'est un plug-in pour Visual Studio qui est totalement intégré, donc double-cliquer sur quelque chose ici vous amène à l'endroit où il est inclus là-bas.
Les survols de la souris dans les info-bulles vous donnent toutes les informations que vous souhaitez, et vous permettent de faire un zoom avant / arrière, de supprimer des sous-arbres entiers dont vous ne vous souciez 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 la période d'essai. Même ainsi, cela ne coûte pas beaucoup, environ 35 $ par licence.
Pour ce qu'il fait, c'est presque parfait. Non seulement #include des graphiques, mais aussi les dépendances entre les projets des fichiers partagés, l'impact sur les temps de construction, les propriétés détaillées dans les grilles, parfait.
J'ai utilisé avec succès IncludeManager dans mon projet C. J'utilise Visual Studio 2013.
smwikipedia
Un peu suspect.
sdd
12
Bonne nouvelle: redhat Source-Navigator (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.
S'appuyant sur la réponse de KeithB , voici la syntaxe gnumake à automatiquement 1) générer les fichiers de dépendance, 2) les tenir à jour, et 3) les utiliser dans votre makefile:
Comprendre est commercial, mais c'est incroyable IMO. Vous pouvez l'essayer gratuitement.
skelliam
1
cscope ( http://cscope.sourceforge.net/ ) fait cela dans un xterm autonome, et peut également être utilisé dans votre éditeur préféré - il a un excellent support emacs et vi / vim.
#include
dépendances telles que les dépendances cpp , iwyu et dep-matrix qui est un outil assez naïf écrit en python.Réponses:
Si vous avez accès à GCC / G ++, l'
-M
option affichera la liste de dépendances. Il ne fait aucune des choses supplémentaires que font les autres outils, mais comme il vient du compilateur, il n'y a aucune chance qu'il récupère les fichiers au «mauvais» endroit.la source
-H
donne même un arbre!-MM
saute les en-o
option, le compilateur va écrire la sortie dans un fichier au lieu de stdout.stderr
place destdout
. Sinon, cette option est plus générale.Merci à KeithB. J'ai recherché la documentation pour cl.exe (VS2008) et j'ai 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.
la source
math.h
Pour une solution lourde, vous devriez consulter doxygen . Il scanne votre base de code et propose un site Web, efficacement, qui documente votre code. L'une des nombreuses choses qu'elle montre est l'inclusion des arbres.
Si vous cherchez à pouvoir brancher la sortie de cet outil dans un autre processus, cela peut ne pas fonctionner pour vous (bien que doxygen produise vers d'autres formats, je ne suis pas vraiment familier avec cette fonctionnalité). Si vous voulez simplement observer les dépendances, cela devrait fonctionner parfaitement.
la source
J'ai joué avec un outil appelé cinclude2dot . C'était assez utile pour avoir une idée d'une base de code assez volumineuse lorsque je suis venu travailler ici. J'ai en fait pensé à l'intégrer dans notre version quotidienne.
la source
.cc/.c/.cxx
fichier (seuls les.h
fichiers qu'elle contient ) peut être redondante.Tout d'abord, cinclude2dot.pl est un script perl qui analyse le code C / C ++ et produit un graphe de dépendances #include sous forme de fichier de points à saisir dans graphviz.
http://www.flourish.org/cinclude2dot/
Si vous ne voulez pas suivre la voie de ce genre 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. C'est un plug-in pour Visual Studio qui est totalement intégré, donc double-cliquer sur quelque chose ici vous amène à l'endroit où il est inclus là-bas.
Les survols de la souris dans les info-bulles vous donnent toutes les informations que vous souhaitez, et vous permettent de faire un zoom avant / arrière, de supprimer des sous-arbres entiers dont vous ne vous souciez 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 la période d'essai. Même ainsi, cela ne coûte pas beaucoup, environ 35 $ par licence.
Pour ce qu'il fait, c'est presque parfait. Non seulement #include des graphiques, mais aussi les dépendances entre les projets des fichiers partagés, l'impact sur les temps de construction, les propriétés détaillées dans les grilles, parfait.
la source
Bonne nouvelle: redhat Source-Navigator (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.
la source
S'appuyant sur la réponse de KeithB , voici la syntaxe gnumake à automatiquement 1) générer les fichiers de dépendance, 2) les tenir à jour, et 3) les utiliser dans votre makefile:
(Assurez-vous de changer ces retraits en hardtabs.)
la source
Vous pouvez également consulter makedepend :
http://en.wikipedia.org/wiki/Makedepend
http://www.xfree86.org/current/makedepend.1.html
la source
Comprendre pour C ++ devrait pouvoir vous aider: il crée une base de données à laquelle vous pouvez accéder depuis Perl.
la source
cscope ( http://cscope.sourceforge.net/ ) fait cela dans un xterm autonome, et peut également être utilisé dans votre éditeur préféré - il a un excellent support emacs et vi / vim.
la source
Il existe un outil gratuit Inclure l'observateur de dépendances de fichiers
la source