Comme ceci :
target_link_libraries(your-target-name pthread boost_thread-mt etc)
Vous ne devez pas utiliser add_dependencies lorsque vous souhaitez lier des bibliothèques. Lier implique une dépendance, mais la dépendance seule ne sera pas suffisante lorsque vous aurez besoin de lier.
Malheureusement, il n'y a pas de conversion directe 1:1 de Makefiles vers CMakeLists. Étant donné que CMake est censé fonctionner sur toutes les plates-formes, il ne peut pas s'appuyer sur des hypothèses spécifiques à la plate-forme comme le fait GNU make, ce qui complique les choses à certains endroits.
En particulier, CMake propose un mécanisme très puissant et assez complexe pour utiliser les bibliothèques :vous appelez find_package avec le nom de votre bibliothèque, qui invoquera un script de recherche de bibliothèque à partir du chemin de votre module cmake. Ce script (qui est également écrit dans CMake) tentera de détecter l'emplacement des fichiers d'en-tête et de bibliothèque de la bibliothèque et de les stocker dans quelques variables CMake qui peuvent ensuite être transmises aux commandes CMake correspondantes telles que include_directories et target_link_libraries.
Il y a deux problèmes avec cette approche :Premièrement, vous avez besoin d'un script de recherche. Heureusement, CMake est livré avec des scripts de recherche pour Pthreads, Boost et quelques autres, mais si vous utilisez une bibliothèque plus exotique, vous devrez peut-être écrire le script de recherche vous-même, ce qui est une sorte d'expérience obscure au début...
Le deuxième problème majeur est qu'il n'existe aucun moyen standard pour un script de recherche de renvoyer ses résultats. Bien qu'il existe des conventions de nommage pour les variables utilisées, celles-ci ne s'appliquent souvent pas. En pratique, cela signifie que vous devrez vérifier la source d'un script de recherche pour savoir comment l'utiliser. Heureusement, les scripts fournis avec CMake sont pour la plupart très bien documentés.
Les scripts intégrés sont situés quelque part comme <cmake-install-prefix>/share/cmake-2.8/Modules
. Pour votre question, regardez les fichiers FindBoost.cmake et FindThreads.cmake (CMake devrait automatiquement se lier à la bibliothèque standard). Anycorn a déjà donné un exemple de code pour utiliser le script Boost, tout ce que vous devez savoir se trouve dans la documentation de CMake ou directement dans les fichiers de script de recherche.
Avec Boost, vous devez vraiment utiliser l'outil de recherche de packages
set(Boost_ADDITIONAL_VERSIONS "1.46" "1.46.0" "1.46.1")
set(Boost_USE_MULTITHREADED ON) # for -mt
find_package(Boost COMPONENTS thread)
if(Boost_FOUND)
MESSAGE(STATUS "Found Boost: ${Boost_LIBRARY_DIRS}")
MESSAGE(STATUS "Found Boost libraries: ${Boost_LIBRARIES}")
set(LIBRARIES "${LIBRARIES};${Boost_LIBRARIES}")
else()
MESSAGE(FATAL_ERROR "Boost Thread NOT FOUND")
endif()
target_link_libraries(executable ${LIBRARIES})