So:
target_link_libraries(your-target-name pthread boost_thread-mt etc)
Sie sollten add_dependencies nicht verwenden, wenn Sie Bibliotheken verknüpfen möchten. Das Verlinken impliziert eine Abhängigkeit, aber die Abhängigkeit allein reicht nicht aus, wenn Sie verlinken müssen.
Leider gibt es keine einfache 1:1-Konvertierung von Makefiles zu CMakeLists. Da CMake auf allen Plattformen laufen soll, kann es sich nicht auf plattformspezifische Annahmen verlassen, wie es GNU make tut, was die Dinge an bestimmten Stellen komplizierter macht.
Insbesondere CMake bietet einen sehr leistungsfähigen und ziemlich komplexen Mechanismus zur Verwendung von Bibliotheken:Sie rufen find_package mit dem Namen Ihrer Bibliothek auf, wodurch ein Bibliothekssuchskript aus Ihrem cmake-Modulpfad aufgerufen wird. Dieses Skript (das ebenfalls in CMake geschrieben ist) versucht, den Speicherort der Header- und lib-Dateien der Bibliothek zu ermitteln und sie in einigen CMake-Variablen zu speichern, die dann an die entsprechenden CMake-Befehle wie include_directories und target_link_libraries übergeben werden können.
Bei diesem Ansatz gibt es zwei Probleme:Erstens benötigen Sie ein Suchskript. Glücklicherweise wird CMake mit Suchskripten für Pthreads, Boost und ein paar andere ausgeliefert, aber wenn Sie eine exotischere Bibliothek verwenden, müssen Sie das Suchskript möglicherweise selbst schreiben, was zunächst eine Art geheimnisvolle Erfahrung ist ...
Das zweite große Problem besteht darin, dass es keine Standardmethode für ein Suchskript gibt, um seine Ergebnisse zurückzugeben. Es gibt zwar Namenskonventionen für die verwendeten Variablen, diese gelten jedoch oft nicht. In der Praxis bedeutet dies, dass Sie sich die Quelle eines Suchskripts ansehen müssen, um zu wissen, wie man es benutzt. Glücklicherweise sind die mit CMake gelieferten Skripte größtenteils sehr gut dokumentiert.
Die eingebauten Skripte befinden sich irgendwo wie <cmake-install-prefix>/share/cmake-2.8/Modules
. Sehen Sie sich für Ihre Frage die Dateien FindBoost.cmake und FindThreads.cmake an (CMake sollte automatisch mit der Standardbibliothek verknüpft werden). Anycorn hat bereits Beispielcode für die Verwendung des Boost-Skripts bereitgestellt, alles andere, was Sie wissen müssen, finden Sie in der CMake-Dokumentation oder direkt in den Suchskriptdateien.
Bei Boost müssen Sie unbedingt den Paketfinder verwenden
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})