Reliant les différentes bibliothèques de Debug et Release dans Cmake sur windows?
Donc j'ai une bibliothèque je compile et j'ai besoin de relier les différents tiers choses en fonction de si c'est le debug ou release build (en particulier la libération ou les versions de débogage de ces bibliothèques). Est-il un moyen facile de le faire dans Cmake?
Edit: je tiens à noter que je suis en utilisant visual studio
Vous devez vous connecter pour publier un commentaire.
Selon la La documentation de CMake:
Donc vous devriez être en mesure de le faire:
IF(CMAKE_BUILD_TYPE MATCHES Release)
de nouveau sensible à la casse.if(CMAKE_BUILD_TYPE MATCHES Release)
est tout simplement inefficace.En quelque sorte la réponse de @Mike Willekes ai CMake liaison dans la même cible les deux release et debug pour moi 🙁
J'ai seulement eu ce travail en définissant à la fois les configurations en une seule ligne, comme suggéré par @sakra dans une question connexe - et de le faire pour toutes les bibliothèques qui doivent être liées:
if (CMAKE_BUILD_TYPE STREQUAL "Release") target_link_libraries(${ARG_NAME} ${LIB_TCMALLOC} ) endif()
debug
mot-clé correspond à la configuration de Débogage (...). Leoptimized
mot-clé correspond à toutes les autres configurations." (cmake.org/cmake/help/v3.0/command/target_link_libraries.html) Ce que je disais à propos de multi configuration des générateurs est que le chèque que vous mettez seule fonctionnera si vous générez le projet dans deux répertoires distincts, l'un pour la libération, l'autre pour le débogage. Dans MSVC construit, il fait sens parfois d'avoir un seul répertoire générées avec la possibilité de les libérer et de débogage.optimized
pour la tcmalloc bibliothèque et il a fini dans notre debug. Nous utilisons les makefiles bien... donc pas sûr que sur VSJe voudrais ajouter quelques notes pour les réponses précédentes.
Si vous avez besoin de créer une liste de plusieurs fichiers que vous souhaitez lier et la stocker dans une mémoire cache variable ensuite, vous devez ajouter le
optimized
oudebug
spécifié avant chaque bibliothèque. Cela peut être particulièrement utile pour les gros fichiers makefile/projets.Ainsi, par exemple, vous pourriez faire quelque chose comme ceci:
Ce qui a fonctionné pour moi a été d'utiliser
$(Configuration)
macro dans une lib chemin d'accès fourni à cmake.Donc, en supposant libs sont séparés, nommé correctement les dossiers, par exemple:
Vous pouvez ensuite appeler cmake avec:
Qui va générer .vcxproj avec Dépendances Supplémentaires, y compris
C:\boost\lib\$(Configuration)\libfoo.lib
, ce qui est évalué, soitC:\boost\lib\Release\libfoo.lib
ouC:\boost\lib\Debug\libfoo.lib
selon la Configuration choisie.