2010-08-28 14 views
1

Je veux accélérer le temps de construction de mon projet C++, et je me demande si ma structure actuelle peut provoquer des recompilations inutiles.Structure du fichier d'en-tête unique C++

J'ai les fichiers * .cc et * .h correspondants, mais tous mes fichiers * .cc incluent un seul fichier d'en-tête qui est main.h.

Dans main.h, j'inclue tout ce qui est nécessaire et les variables globales externes et déclare les fonctions que j'utilise. Fondamentalement, je n'utilise pas d'espaces de noms.

Est-ce une mauvaise conception qui pourrait provoquer des recompilations inutiles et des constructions lentes?

Répondre

3

Cela dépend. Si main.h est rarement modifié, vous pouvez utiliser des en-têtes précompilés, ce qui améliorera considérablement le temps de compilation. Par contre, si main.h est régulièrement utilisé, ce n'est probablement pas un bon design.

Un problème supplémentaire introduit en mettant tout dans un fichier d'inclusion est qu'il ne favorise pas vraiment la structure dans votre application. Dans les applications bien conçues, vous avez souvent une structure en couches. En mettant tout dans un fichier d'inclusion, vous brouillez la structure de votre application. Cela peut fonctionner pour une petite application, mais si votre application se développe, vous finirez un jour avec un spaghetti complet, où tout dépend de tout le reste. Essayez de diviser le fichier d'inclusion en plusieurs parties. Généralement, vous aurez un fichier .cpp et un fichier .h par classe. Essayez d'utiliser autant que possible les déclarations forward dans votre fichier include, et incluez seulement (en .h et .cpp) ce qui est vraiment nécessaire.

0

Cette conception conduira certainement à un temps de construction lent. Ce que font les fichiers et les IDE lorsque vous démarrez une construction, c'est qu'ils vérifient quels fichiers source (cc) ont été modifiés depuis la dernière compilation. Il vérifie également si les fichiers dont un fichier source dépend ont été modifiés. Un fichier source dépend de tous les fichiers d'en-tête qu'il inclut, ainsi que de tous les fichiers d'en-tête inclus dans ces fichiers, etc. S'il détecte des modifications, il recompile ce fichier source.

Étant donné que votre configuration signifie que chaque fichier source inclut chaque fichier d'en-tête, chaque fois que vous modifiez un même fichier d'en-tête, vous devez recompiler chaque fichier source.

Vous voudrez certainement essayer de séparer un peu plus les choses et de vous débarrasser de votre fichier main.h. Habituellement, les gens essaient de minimiser le nombre de fichiers d'en-tête inclus dans un fichier d'en-tête et préfèrent garder l'inclusion dans les fichiers source, soit dit en passant.