GNU/Linux >> Linux Esercitazione >  >> Linux

Creazione di file CMakeLists da Makefile esistente

In questo modo:

target_link_libraries(your-target-name pthread boost_thread-mt etc)

Non dovresti usare add_dependencies quando vuoi collegare le librerie. Il collegamento implica una dipendenza, ma la dipendenza da sola non sarà sufficiente quando avrai bisogno di un collegamento.


Sfortunatamente, non esiste una semplice conversione 1:1 da Makefile a CMakeLists. Poiché CMake dovrebbe funzionare su tutte le piattaforme, non può fare affidamento su presupposti specifici della piattaforma come fa GNU make, il che complica le cose in certi punti.

In particolare, CMake offre un meccanismo molto potente e piuttosto complesso per l'utilizzo delle librerie:chiami find_package con il nome della tua libreria, che invocherà uno script di ricerca della libreria dal tuo percorso del modulo cmake. Questo script (anch'esso scritto in CMake) tenterà di rilevare la posizione dell'intestazione della libreria e dei file lib e di memorizzarli in un paio di variabili CMake che possono quindi essere passate ai comandi CMake corrispondenti come include_directories e target_link_libraries.

Ci sono due problemi con questo approccio:in primo luogo, è necessario uno script di ricerca. Fortunatamente, CMake viene fornito con script di ricerca per Pthreads, Boost e un paio di altri, ma se stai utilizzando una libreria più esotica, potresti dover scrivere tu stesso lo script di ricerca, che all'inizio è una specie di esperienza arcana...

Il secondo problema principale è che non esiste un modo standard per uno script di ricerca di restituire i risultati. Sebbene esistano convenzioni di denominazione per le variabili utilizzate, spesso non si applicano. In pratica ciò significa che dovrai controllare la fonte di uno script di ricerca per sapere come usarlo. Fortunatamente, gli script forniti con CMake sono per lo più molto ben documentati.

Gli script integrati si trovano da qualche parte come <cmake-install-prefix>/share/cmake-2.8/Modules . Per la tua domanda, guarda i file FindBoost.cmake e FindThreads.cmake (CMake dovrebbe collegarsi automaticamente alla libreria standard). Anycorn ha già fornito del codice di esempio per l'utilizzo dello script Boost, tutto il resto che devi sapere è nella documentazione di CMake o direttamente nei file dello script di ricerca.


Con Boost hai davvero bisogno di usare il cercatore di pacchetti

  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. Come trovare un file in Linux

  2. Filtraggio di tcpdump:creare ordine dal caos

  3. Come catturare un file da Awk?

  4. Awk da linee diverse?

  5. xauth non crea il file .Xauthority

Come creare una scatola vagabondo da una scatola esistente

Come rimuovere (^M) caratteri da un file in Linux

Creazione di un Cloud Server da una ISO

Come eseguire una ricerca di file fuzzy in Linux

Crea un PEM da un file PPK

In che modo install -c è diverso da cp