Question

Pour la plupart de mon travail de développement avec Visual C ++, j'utilise builds partiel, par exemple appuyez sur F7 et seulement les fichiers modifiés C ++ et leurs dépendances se reconstruit, suivi d'un lien supplémentaire. Avant de passer sur une version test, je prends la précaution de faire une reconstruction complète, qui dure environ 45 minutes sur mon projet en cours. Je l'ai vu de nombreux messages et articles prônant cette action, mais étonnant est nécessaire, et si oui, pourquoi? Est-il affecte le fichier EXE livré ou l'APB associé (que nous utilisons dans les tests)? Est-ce que la fonction logicielle différent du point de vue de test?

Pour diffusion construit, j'utilise VS2005, compilation incrémentale et de relier, en-têtes précompilés.

Était-ce utile?

La solution

a pas tout le monde rencontré ce modèle d'utilisation? Je reçois des erreurs de construction étranges, et avant même enquête que je fais une reconstruction complète, et le problème est résolu.

Cela en soi me semble être assez bonne raison de faire une reconstruction complète avant une sortie.

Que vous seriez prêt à transformer une accumulation progressive qui se termine sans problèmes sur des tests, est une question de goût, je pense.

Autres conseils

Le système de construction partielle fonctionne en vérifiant les dates de fichier des fichiers source contre les résultats de construction. Ainsi, il peut casser si vous par exemple restaurer un fichier antérieur du contrôle de source. Le fichier plus tôt aurait une date de modification plus tôt que le produit de construction, de sorte que le produit ne serait pas reconstruit. Pour se protéger contre ces erreurs, vous devriez faire une construction complète si elle est une version finale. Pendant que vous développez cependant, builds supplémentaires sont bien sûr beaucoup plus efficace.

Modifier. Et bien sûr, de faire une reconstruction complète, vous aussi d'éviter d'éventuels bugs dans le système de construction incrémentale

Le problème de base est que la compilation dépend de l'environnement (drapeaux de ligne de commande, les bibliothèques disponibles, et probablement un peu de magie noire), et ainsi de deux compilations ne le même résultat si elles sont effectuées dans les mêmes conditions. Pour les tests et le déploiement, vous voulez vous assurer que les environnements sont aussi contrôlés que possible et vous ne recevez pas les comportements farfelus dus au code impair. Un bon exemple est si vous mettez à jour une bibliothèque système, puis recompiler la moitié des dossiers - moitié tentent toujours d'utiliser l'ancien code, la moitié ne sont pas. Dans un monde parfait, cela soit l'erreur tout de suite ou ne cause aucun problème, mais malheureusement, parfois aucun des deux arriver. En conséquence, faire une recompilation complète évite beaucoup de problèmes associés à un processus de construction échelonnées.

Je le recommande vivement. Je l'ai vu à plusieurs reprises avec un grand Visual C ++ solution le vérificateur de dépendance ne parviennent pas à prendre une certaine dépendance à l'égard du code a changé. Lorsque ce changement est un fichier d'en-tête que les effets de la taille d'un objet peut commencer à se produire des choses très étranges. Je suis sûr que le vérificateur de dépendance a obtenu mieux dans VS 2008, mais je ne ferais pas confiance encore pour une version release.

La principale raison de ne pas expédier un binaire est lié progressivement que certaines optimisations sont désactivées. L'éditeur de liens laissera padding entre les fonctions (pour le rendre plus facile de les remplacer sur le lien suivant incrémental). Cela ajoute un peu de ballonnement au binaire. Il peut y avoir des sauts supplémentaires aussi bien, ce qui modifie le modèle d'accès à la mémoire et peut provoquer la pagination supplémentaire et / ou défauts de cache. Les anciennes versions de fonctions peuvent continuer à résider dans l'exécutable même si elles ne sont jamais appelés. Cela conduit aussi à enfler binaire et un ralentissement des performances. Et vous ne pouvez certainement pas utiliser la génération de code à temps lien avec la liaison incrémentielle, donc vous manquez plus d'optimisations.

Si vous donnez une version de débogage à un testeur, alors il est probablement pas une grosse affaire. Mais vos candidats de libération devraient être construits à partir de zéro en mode de libération, de préférence sur une machine de construction dédié avec un environnement contrôlé.

Visual Studio a quelques problèmes avec partiel (incrémental), (builds erreurs que je rencontrais pour la plupart des liens) De temps à autre, il est très utile d'avoir une reconstruction complète.

En cas de longs temps de compilation, il y a deux solutions:

  1. Utilisez un outil de compilation parallèle et tirer parti de votre (supposée) du matériel de base à plusieurs.
  2. Utiliser une machine de construction. Ce que j'utilise le plus est une machine de construction séparée, avec un CruiseControl mis en place, qui effectue des reconstructions complètes de temps en temps. La version « officielle » que je fournis à l'équipe de test, et, éventuellement, au client, est toujours pris de la machine de construction, pas de l'environnement du développeur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top