[Jderobot-dev] Cuestiones sobre los CMakes

Luis Roberto Morales lr.morales.iglesias en gmail.com
Lun Dic 17 23:08:44 CET 2012


Buenas noches,

durante estos días que he estado estudiando componentes básicos de jderobot
y jugando con variantes de basic_component, me han surgido algunas
cuestiones sobre los CMakes.

La primera de todas, más que una cuestión, es sobre un problema de enlazado
de librerías. Cuando compilaba (Ubuntu 12.10 amd64 / gcc-4.6) algunos de
los componentes, se producían fallos al enlazar a pesar de tener todas las
librerías necesarias instaladas (y en sus versiones adecuadas). Tras
investigar un poco descubrí que el problema se me solucionaba con cambiar
el orden de las librerías (en aquel entonces no sabía modificar los
CMakeFiles correctamente y me dedicaba a cambiar el orden manualmente).
Por lo que he visto, puede tener que ver con cómo funciona ld por defecto
en ubuntu desde la versión 11.04 [1] y requiere que las librerías se den en
el orden de dependencia correcto.

La segunda, es una pregunta sobre por qué hay librerías declaradas en
CMAKE_CXX_FLAGS en lugar de en TARGET_LINK_LIBRARIES; por ejemplo, es
habitual ver algo del estilo


set( CMAKE_CXX_FLAGS "-Wno-deprecated -lGL -lGLU -lglut" )

TARGET_LINK_LIBRARIES(*... *
          ${opencv_LIBRARIES}
          ...
      )

cuando también es válido


set( CMAKE_CXX_FLAGS "-Wno-deprecated" )

TARGET_LINK_LIBRARIES(*...
          *"GL"
*          *"GLU"
*          *"glut"
          ${opencv_LIBRARIES}
          ...
      )

y facilita ver/modificar las dependencias.


La tercera es sobre dependencias de librerías como OpenCV en los CMakes. He
visto indistintamente (y en algunos casos ambas) comprobaciones de estas
librerías a través de PKG_CHECK_MODULES y a través de inclusiones de los
CMakes del directorio deps. ¿Hay algún motivo para utilizar uno u otro o
simplemente es que los CMakes de deps se hicieron más tarde/están obsoletos
y por eso están mezclados?


Por último, una nota sobre las librerías relacionadas con OpenGL
(GL,GLU,glut), he visto que hay helpers en CMake para encontrarlas (al
menos desde la versión 2.8.1). Creo que FIND_PACKAGE(OpenGL) [2] y
FIND_PACKAGE(GLUT) [2] resuelven esas librerías y permitirían lanzar un
aviso desde cmake en el caso de que alguien que no las tuviese instaladas
(no estoy seguro, pero tal como están declaradas los fallos aparecerían en
tiempo de compilación... no lo he probado). Es posible que ya se supiera y
por algún motivo no se utilice.


Gracias por vuestras respuestas,
Roberto


[1] https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition
[2] cmake --help-module FindOpenGL y cmake --help-module FindGLUT
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20121217/00c8c2e4/attachment.htm 


More information about the Jde-developers mailing list