2010-05-31 9 views
4

Quelle est la manière correcte et facile d'avoir plusieurs configurations de construction dans le même projet VS, où la solution contient également plusieurs projets? Les projets auraient différentes configurations de construction. Fondamentalement, je suis à la recherche de quelque chose comme le projet A avec Dll Debug, Dll Release, Static (bibliothèque) Debug, et Static (bibliothèque) Release, projet B avec Debug & Release qui construisent un .exe.Plusieurs projets avec une configuration de construction multiple (différente) dans une solution

Répondre

3

Ce n'est pas comme ça que ça fonctionne. Si vous donnez à la bibliothèque l'option de lier le CRT statiquement ou d'utiliser la version DLL du CRT, vous devrez également avoir la même option sur le projet EXE. Mélanger les options produira généralement une série d'erreurs de liens. Même si vous parvenez à les éviter, une catastrophe se produira au moment de l'exécution lorsque les fonctions du fichier .lib utiliseront un allocateur de mémoire différent des fonctions de l'EXE. L'utilisation de l'approche «tous» a peu de sens. Tant que vous savez que vous n'utiliserez que des bibliothèques statiques et que vous créerez un blob EXE monolithique, la version statique du CRT aura du sens. Rend le déploiement de votre programme plus facile. Si vous envisagez d'utiliser des DLL un jour, seule la version DLL de la CRT a du sens.

+0

Je cherche comment les bibliothèques offrent source unique une option pour construire des bibliothèques dll ou statiques (ou les deux). Il peut y avoir un projet distinct qui construit un exemple exécutable, ou des tests. – KTC

+0

@KTC: bien, ça va. VS ne construira que les .libs si vous choisissez une configuration que l'EXE n'a pas. –

0

Le moyen le plus simple d'y parvenir serait de créer plusieurs projets qui compileraient les mêmes sources. Vous pourriez avoir des projets pour chacun des cas que vous voulez (DLL, Static Lib). Vous pourriez alors avoir plusieurs configurations pour ces projets afin qu'ils puissent générer plusieurs variations.

projet A (DLL)

  • "DebugStatic" Configuration - Debug, CRT statique -> MYLIBDS.DLL
  • "ReleaseStatic" Configuration - Libération, CRT statique -> MYLIBS.DLL
  • " DebugDynamic » - Debug, CRT DLL -> MYLIBD.DLL
  • "ReleaseDynamic" - Libération, CRT DLL -> MYLIB.DLL

projet B (LIB)

  • "DebugStatic" Configuration - Debug, CRT statique -> MYLIBDS.LIB
  • "ReleaseStatic" Configuration - Libération, CRT statique -> MYLIBS.LIB
  • "DebugDynamic" - Debug, CRT DLL -> MYLIBD.LIB
  • "ReleaseDynamic" - Libération, CRT DLL -> MYLIB.LIB

Vous pouvez utiliser la même approche pour générer des binaires distincts pour Ansi par rapport à Unicode, x86 vs x64, unique par rapport fileté multi-thread, etc Chaque projet comprend le même ensemble des fichiers source avec des blocs de code conditionnels si nécessaire. Ensuite, vous pouvez ajouter quelque chose comme ceci dans le fichier d'en-tête associé à la bibliothèque pour le rendre plus facile de lier dans la version appropriée:

#ifdef _DEBUG 
    #ifdef _DLL 
    #pragma comment(lib, "MYLIBD.LIB") 
    #else 
    #pragma comment(lib, "MYLIBDS.LIB") 
    #endif 
#else 
    #ifdef _DLL 
    #pragma comment(lib, "MYLIB.LIB") 
    #else 
    #pragma comment(lib, "MYLIBS.LIB") 
    #endif 
#endif 
Questions connexes