49 votes

Comment améliorer les temps de compilation de Visual C ++?

Je suis de la compilation de 2 projets C++ dans un buildbot, sur chaque commit. Les deux sont autour de 1000 fichiers, l'un est de 100 kloc, l'autre de 170 kloc. Les temps de Compilation sont très différents de gcc (4.4) dans Visual C++ (2008).

Visual C++ compilations pour un projet de prendre dans les 20 minutes. Ils ne peuvent pas tirer parti des processeurs multi-cœurs, car un projet dépend de l'autre. En fin de compte, une compilation complète des deux projets en Debug et Release, en 32 et 64 bits prend plus de 2 heures 1/2.

gcc compilations pour un projet de prendre dans les 4 minutes. Il peut être parallélisé sur les 4 cœurs et dure environ 1 min 10 sec. Tous les 8 versions pour 4 versions (Debug/Release, 32/64 bits) des 2 projets sont compilés en moins de 10 minutes.

Ce qui se passe avec Visual C++ temps de compilation? Ils sont pratiquement 5 fois plus lente.

Quel est le temps moyen qui peut être prévu pour compiler en C++ kloc? Les miennes sont de 7 s/kloc avec vc++ et 1.4 s/kloc avec gcc.

Quelque chose peut être fait pour accélérer les temps de compilation sur Visual C++?

11voto

jdisk Points 471

Les projets qui dépendent les uns des autres n'impliquent pas qu'aucune parallélisation n'est possible. Les systèmes de compilation sont suffisamment intelligents pour comprendre et éviter les dépendances critiques. Sinon, gcc ne pourrait pas utiliser 4 cœurs.

Donc (en plus des autres étapes), pourquoi ne pas simplement essayer d'activer le multitraitement dans Visual Studio à l'aide de / MP (voir http://msdn.microsoft.com/en-us/library/bb385193.aspx ).

6voto

Len Holgate Points 12579

Comment construisez-vous les projets Visual Studio? Êtes-vous simplement à l'exécution de l'ide (devenv) avec le projet et /build ou avez-vous un fichier makefile similaire à ce que je suppose que vous utilisez pour la gcc. Je suis en supposant que les deux versions utiliser un makefile, mais j'ai pensé qu'il vaut la peine de vérifier.

Êtes-vous en utilisant les en-têtes précompilés pour compiler? Si vous n'êtes PAS en utilisant les en-têtes précompilés pour VS, alors vous pourriez choisir d'utiliser. Personnellement, je vous recommande d'utiliser l' #pragma hdrstop approche plutôt qu'un seul all inclusive fichier d'en-tête, mais si vous n'êtes PAS en utilisant les en-têtes précompilés et que vous souhaitez essayer un seul all inclusive fichier d'en-tête de la force inclus (à l'aide de l' /FI compilateur commutateur de ligne de commande) peut être testé rapidement sans aucune modification de code.

J'ai écrit sur les deux /FI et #pragma hdrstop ici: http://www.lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html

6voto

tommyk Points 631

Ce n'est pas la réponse directe à la question, mais dans mon entreprise, nous utilisons IncrediBuild pour la compilation distribuée. Cela accélère vraiment le processus de compilation. http://incredibuild.com/visual_studio.htm

3voto

Hollance Points 2402

Le livre "Conception de logiciels C ++ à grande échelle" de John Lakos contient de nombreux conseils pour structurer votre code et votre conception de projets à grande échelle. Y compris de nombreux conseils pour accélérer la compilation. Pas directement lié à Visual C ++, mais mérite néanmoins d'être lu.

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