38 votes

Que mettre en en-tête précompilé? (MSVC)

Quels sont les meilleurs candidats pour un fichier d'en-tête précompilé? Puis-je y placer des en-têtes STL et Boost, même s'ils ont des modèles? Et cela réduira-t-il les temps de compilation? En outre, quels sont les meilleurs paramètres IDE pour réduire les temps de compilation?

50voto

Andrew Shepherd Points 16670

La réponse rapide: la STL et Boost les en-têtes effet appartiennent dans le fichier d'en-tête précompilé, même si ces fichiers d'en-tête de définir des classes template.

Lors de la génération d'un fichier d'en-tête de fichier, un compilateur analyse le texte d'en-tête (une tâche importante!), et le convertit en un format binaire qui est optimisé pour le compilateur de la prestation.

Même si le modèle de classes seront instanciés lorsque d'autres .rpc, les fichiers sont compilés, ils seront instanciés à partir des informations de l'en-tête précompilé, ce qui est nettement plus rapide pour le compilateur à lire.


(plus tard)

Une chose que vous devriez pas inclure dans un fichier d'en-tête sont des fichiers qui font partie de votre projet et d'en changer fréquemment, même si toutes les .Fichier CPP contient ces fichiers.

La raison en est la génération de l'en-tête précompilé peut prendre du temps, parce que le boost, stl et des bibliothèques de windows sont très grandes.

Vous pourriez avoir un simple fichier (par exemple "StringDefs.h"), que tout utilise. Si StringDefs.h est inclus dans stdafx.h, et un développeur touche StringDefs.h, puis chaque développeur doit attendre jusqu'à ce que l' intégralité de l'en-tête précompilé recompile. Il serait beaucoup plus rapide si StringDefs.h a laissé de côté de l'en-tête précompilé, et analysé avec chaque .Fichier CPP.

6voto

George V. Reilly Points 5471

Un ajout à la réponse d'Andrew Shepherd. Utilisez l'en-tête précompilé pour les fichiers d'en-tête externes à votre projet, pour les fichiers peu modifiés. Si vous modifiez constamment les fichiers d'en-tête dans le projet actuel, il ne vaut probablement pas la peine de les précompiler.

4voto

Christoph Heindl Points 219

J'ai écrit un article sur les techniques permettant de réduire le temps de compilation. Parmi ces techniques, vous trouverez un post sur un en-tête précompilé et son application ici . Il contient également une section sur les meilleures pratiques que vous pouvez trouver intéressantes. Les scripts CMake qui le gèrent de manière transparente sont inclus.

-1voto

Andy Points 15910

Mettez n'importe quoi dans l'en-tête précompilé que la plupart des fichiers .cpp de ce projet incluraient de toute façon. Cela vaut pour n'importe quel fichier d'en-tête, vraiment. Cela permet au compilateur d'analyser ces fichiers une fois, puis de réutiliser ces informations dans tous les fichiers .cpp du même projet.

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