Je compile donc une bibliothèque et je dois relier différents éléments tiers en fonction de la version de débogage ou de version (en particulier de la version ou des versions de débogage de ces bibliothèques). Y at-il un moyen facile de faire cela dans Cmake?
Edit: je dois noter que j'utilise Visual Studio
Selon la documentation CMake :
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
"Debug", "optimisé" ou "général" mot-clé indique que la bibliothèque immédiatement après, il doit être utilisé seulement pour la construction correspondante configuration.
Donc, vous devriez pouvoir faire ceci:
add_executable( MyEXE ${SOURCES})
target_link_libraries( MyEXE debug 3PDebugLib)
target_link_libraries( MyEXE optimized 3PReleaseLib)
D'une manière ou d'une autre, la réponse de @Mike Willekes a obtenu pour CMake un lien dans la même cible les deux versions et le débogage pour moi :(
Cela fonctionne uniquement en plaçant les deux configurations sur une seule ligne, comme suggéré par @sakra dans une question connexe -, et ce, pour chaque bibliothèque devant être liée:
target_link_libraries ( app
debug ${Boost_FILESYSTEM_LIBRARY_DEBUG}
optimized ${Boost_FILESYSTEM_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_LOG_LIBRARY_DEBUG}
optimized ${Boost_LOG_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG}
optimized ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE} )
# ...
J'aimerais ajouter quelques notes aux réponses précédentes.
Si vous devez créer une liste de plusieurs fichiers que vous souhaitez lier et stocker dans une variable de cache, vous devez ajouter les variables optimized
ou debug
spécifiées avant chaque bibliothèque. Cela peut être particulièrement utile pour les plus grands makefiles/projets.
Ainsi, par exemple, vous pourriez faire quelque chose comme ceci:
set( MyFavLib_LIBRARIES
debug debug/module1.lib optimized release/module1.lib
debug debug/module2.lib optimized release/module2.lib )
target_link_libraries( app ${MyFavLib_LIBRARIES} )