2009-07-24 8 views
3

Duplique possibles:
C/C++: Detecting superfluous #includes?
How should I detect unnecessary #include files in a large C++ project?supprimer automatiquement les déclarations #include inutiles

Salut,

J'ai été suite à de nombreuses discussions sur la façon de réduire le temps de construction de C/Projets C++. Habituellement, une bonne optimisation consiste à se débarrasser des déclarations #include en utilisant des déclarations anticipées. Maintenant, je me demandais:

Y at-il peut-être un outil qui peut calculer l'arbre de dépendance #include entre C/C++ en-tête fichiers (je sais que mkdep sous Linux peut le faire), puis commence un 'supprimer en-tête/recompiler 'cycle? Ce serait génial si l'outil pouvait essayer de supprimer des nœuds de l'arbre de dépendance (par exemple, supprimer #include des déclarations de fichiers), puis reconstruire le projet pour voir s'il fonctionne toujours. Il ne devrait pas avoir besoin d'être très intelligent (comme dans le refactoring du code pour rendre inutiles les fichiers d'en-tête en utilisant des pointeurs plutôt que des valeurs), mais je crois que de nombreux projets sur lesquels j'ai travaillé comportaient des instructions #include inutiles. Cela arrive généralement en refactorisant le code et en le déplaçant, mais en oubliant de prendre le #include.

Est-ce que quelqu'un sait si un tel outil existe?

+2

duplications possibles: http://stackoverflow.com/questions/614794/cc-detecting-superfluous-includes et http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include- files-in-a-large-c-project – dfa

+0

Notez que lorsque vous devez générer plusieurs configurations (plates-formes ou options de construction), le problème devient plus compliqué car vous ne voulez pas casser d'autres builds. Une autre chose est que votre objectif de minimisation automatique des dépendances peut interférer avec un autre objectif: garder chaque fichier d'inclusion auto-suffisant. – AProgrammer

+0

boîte (s) de construction étant x86_64 avec 8 Go + de RAM, les processeurs multicœurs rapides avec les plus grandes caches L1/L2 que vous pouvez obtenir, serait une approche brute mais rapide et bon marché du problème d'optimisation de temps de construction. Je peux dire que d'une expérience personnelle avec une base de code importante :-) En plus, c'est seulement la première version qui prend beaucoup de temps - si vous faites des changements incrémentaux, vous devriez seulement recompiler très peu de modules, donc ça vaut le coup aussi d'un autre angle. –

Répondre

1

Il y a eu beaucoup de questions similaires à ceci. Jusqu'à présent, personne n'a trouvé un très bon outil pour lister le graphe de dépendance et hilight multiple includes etc. (favori semble être doxygen) et encore moins effectuer des modifications sur les fichiers eux-mêmes. Donc, je suppose que l'Anser va être "Non" - Je serais heureux de me tromper, cependant!

Questions connexes