GNU/Linux >> Tutoriales Linux >  >> Linux

Crear un archivo CMakeLists a partir de un Makefile existente

Así:

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

No debe usar add_dependencies cuando desee vincular bibliotecas. La vinculación implica una dependencia, pero la dependencia por sí sola no será suficiente cuando necesite vincular.


Desafortunadamente, no existe una conversión directa 1:1 de Makefiles a CMakeLists. Dado que se supone que CMake se ejecuta en todas las plataformas, no puede basarse en suposiciones específicas de la plataforma como lo hace GNU make, lo que complica las cosas en ciertos lugares.

En particular, CMake ofrece un mecanismo muy poderoso y bastante complejo para usar bibliotecas:llama a find_package con el nombre de su biblioteca, que invocará un script de búsqueda de biblioteca desde la ruta de su módulo cmake. Este script (que también está escrito en CMake) intentará detectar la ubicación de los archivos lib y de encabezado de la biblioteca y almacenarlos en un par de variables de CMake que luego se pueden pasar a los comandos de CMake correspondientes, como include_directories y target_link_libraries.

Hay dos problemas con este enfoque:primero, necesita un script de búsqueda. Afortunadamente, CMake incluye scripts de búsqueda para Pthreads, Boost y un par de otros, pero si está utilizando una biblioteca más exótica, es posible que deba escribir el script de búsqueda usted mismo, lo cual es una experiencia arcana al principio...

El segundo gran problema es que no existe una forma estándar para que un script de búsqueda devuelva sus resultados. Si bien existen convenciones de nomenclatura para las variables utilizadas, a menudo no se aplican. En la práctica, eso significa que tendrá que verificar la fuente de un script de búsqueda para saber cómo usarlo. Afortunadamente, los scripts que vienen con CMake están en su mayoría muy bien documentados.

Los scripts incorporados se encuentran en algún lugar como <cmake-install-prefix>/share/cmake-2.8/Modules . Para su pregunta, mire los archivos FindBoost.cmake y FindThreads.cmake (CMake debería vincularse automáticamente con la biblioteca estándar). Anycorn ya proporcionó un código de muestra para usar el script Boost, todo lo demás que necesita saber está en la documentación de CMake o directamente en los archivos de script de búsqueda.


Con Boost realmente necesitas usar el buscador de paquetes

  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. Recuperar nombre de archivo del descriptor de archivo en C

  2. Lectura de un archivo en ensamblaje

  3. Exclusión de directorio al crear un archivo .tar.gz

  4. ¿Cómo crear un archivo en Linux desde la ventana de terminal?

  5. ¿En qué se diferencia install -c de cp?

Cómo crear una caja vagabunda a partir de una caja existente

Cómo quitar (^M) caracteres de un archivo en Linux

Creación de un servidor en la nube a partir de una ISO

Cómo hacer una búsqueda difusa de archivos en Linux

Crear un PEM a partir de un archivo PPK

xauth no crea el archivo .Xauthority