2008-09-05 8 views
3

Je suis curieux de connaître les pratiques de tout utilisateur lorsqu'il s'agit d'utiliser ou de distribuer des bibliothèques pour une application que vous écrivez.Gestion/Utilisation de bibliothèques avec des versions de débogage et des versions de publication

Tout d'abord, lorsque vous développez votre application, reliez-vous la version de débogage ou de publication des bibliothèques? (Lorsque vous exécutez votre application en mode débogage)

Ensuite, lorsque vous exécutez votre application en mode édition juste avant le déploiement, quelle version des bibliothèques utilisez-vous?

Comment effectuer le basculement entre votre version de débogage et la version des bibliothèques? Le faites-vous manuellement, utilisez-vous des macros, ou quoi d'autre faites-vous?

Répondre

3

Je voudrais tout d'abord déterminer quelles sont les exigences nécessaires à la bibliothèque:

  1. Debug/Release
  2. support Unicode
  3. Et ainsi de suite ..

Avec qui est déterminé, vous pouvez alors créer des configurations pour chaque combinaison requise par vous-même ou d'autres utilisateurs de la bibliothèque. Lors de la compilation et de la liaison, il est très important de conserver des bibliothèques et un exécutable cohérents par rapport aux configurations utilisées, c'est-à-dire de ne pas mélanger la mise à jour & lors de la liaison. Je sais que sur la plate-forme Windows/VS, cela peut entraîner des problèmes de mémoire subtile si les librairies de version & de débogage sont mélangées dans un exécutable. Comme Brian l'a mentionné dans Visual Studio, il est préférable d'utiliser Configuration Manager pour configurer la manière dont vous voulez que chaque configuration soit créée. Par exemple, nos projets requièrent que les configurations suivantes soient disponibles en fonction de l'exécutable en cours de construction:

  1. Debug + Unicode
  2. Debug + ASCII
  3. sortie + Unicode
  4. sortie + ASCII

Les utilisateurs de ce projet particulier utiliser le Gestionnaire de configuration en fonction de leurs besoins exécutables avec le les configurations disponibles du projet. En ce qui concerne l'utilisation des macros, elles sont largement utilisées pour implémenter des décisions de temps de compilation pour des exigences comme si la version de débogage ou de libération d'une fonction doit être liée. Si vous utilisez VS, vous pouvez afficher l'attribut de définitions du pré-processeur pour voir comment les différentes macros sont définies, par ex. _DEBUG _RELEASE, voici comment les contrôles de configuration sont compilés.

Quelle plate-forme utilisez-vous pour compiler/lier vos projets?

EDIT: Extension de votre commentaire mis à jour ..

Si l'option Configuration Manager n'est pas disponible pour vous, alors je recommande d'utiliser les propriétés suivantes du projet:

  • Linker ->Répertoires Bibliothèque supplémentaires ou Linker ->Entrée

Utiliser la macro $(ConfigurationName) pour établir une liaison avec la configuration de bibliothèque appropriée, par ex. Déboguer/Relâcher.

$(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.lib 
  • Événements Construire ou construction faite sur commande Étape propriété de configuration

Exécuter une copie du fichier de bibliothèque requise (s) du projet dépend avant (ou après) la construction survenant.

xcopy $(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.dll $(IntDir) 

Le $(ProjectDir) macro sera remplacée par l'emplacement du projet en cours et provoque l'opération de se produire par rapport au projet en cours. La macro $(ConfigurationName) sera remplacée par la configuration actuellement sélectionnée (Debug ou Release par défaut) qui permet de copier les éléments corrects en fonction de la configuration en cours de construction. Si vous utilisez une convention de dénomination régulière pour vos configurations de projet, cela vous aidera, car vous pouvez utiliser la macro $(ConfigurationName), sinon vous pouvez simplement utiliser une chaîne fixe.

0

J'utilise VS. La façon dont je le fais est que les bibliothèques dont j'ai besoin à travers les références du projet. Qui dit simplement dans quel dossier rechercher une bibliothèque spécifique au moment du chargement du projet. Je développe mes bibliothèques pour qu'elles soient aussi indépendantes ou réutilisables que possible. Par conséquent, ils sont tous des projets qui leur sont propres. Donc des bibliothèques dont j'ai besoin pour un projet spécifique, je crée un dossier "3rdParty" ou "libs" au même niveau que mon dossier "src" dans mon arborescence svn. J'ai tendance à n'utiliser que des librairies libérées, mais quand je rencontre des problèmes inconnus et que je veux passer en débogage, je copie manuellement une version de débogage des fichiers dans le dossier "lib" et recharge le projet.

Je ne suis pas sûr que je devrais garder les deux versions de débogage et libéré dans mon arbre svn. Bien que ce soient des projets qui leur sont propres, les garder dans le svn tree d'un autre projet ne fonctionne pas. Ils peuvent être reconstruits sans accroc à tout moment.

Et puis je voulais trouver un moyen de rendre le commutateur plus ... hmmm ... bien fondamentalement automatique si vous, mais ce n'est pas ce que je veux dire vraiment. Il semble juste que changer les fichiers manuellement entre libéré et déboguer n'est pas juste. Peut-être que je ne l'ai pas encore trouvé, mais ce que je voudrais est une option qui ferait comme: Pour la bibliothèque "stack.dll" regarder dans "...... \ 3rdParty \" pour la libération et "... ... \ 3rdPartyD \ "pour le débogage.

Tout ce que ces quelque chose comme je ne sais pas. Que suggérez-vous? Rappelez-vous que les bibliothèques sont des projets externes. Là les fichiers construits sont totalement ailleurs. En fait, pensez-y comme vous devez extraire un autre projet, le construire, et copier la bibliothèque construite si vous voulez une autre copie. Comment voulez-vous mettre cela en place?

Questions connexes