GNU/Linux >> LINUX-Kenntnisse >  >> Linux

CMakeLists-Datei aus vorhandenem Makefile erstellen

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})

Linux
  1. TCPdump filtern:Ordnung aus Chaos schaffen

  2. Lesen von Grep-Mustern aus einer Datei?

  3. So hindern Sie Nicht-Root-Benutzer daran, einen Crontab-Eintrag in Linux zu erstellen

  4. Lesen aus einer Datei in Assembly

  5. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

So erstellen Sie eine Vagrant-Box aus einer vorhandenen Box

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Erstellen eines Cloud-Servers aus einer ISO

So führen Sie eine Fuzzy-Dateisuche unter Linux durch

Ausschließen des Verzeichnisses beim Erstellen einer .tar.gz-Datei

xauth erstellt keine .Xauthority-Datei