[Jderobot-dev] Cuestiones sobre los CMakes

Mikel Gonzalez Baile m.gonzalezbai en gmail.com
Mar Dic 18 11:02:36 CET 2012


Hola Roberto,

primero de todo, adelante con todas las mejoras que se te ocurran!!! CMake
no es que lleve mucho tiempo implantado en JDErobot y, partiendo de la base
que hay, cualquier aporte es bien recibido. Sobre las cuestiones que
comentas:

*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).*

Fallos similares me han dado a mí con la versión de gcc y g++ que comentas
(4.6 y/ó 4.7), al no entender bien el motivo, ya que como tú tenía todo lo
necesario para realizar la compilación aconsejaba el uso de la versión 4.4
dónde todo funcionaba perfectamente. Si consigues que con la 4.6 o 4.7
funcione, modifica lo que necesites y commit!!.

*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*

Pues tienes toda la razón, en un principio lo definí en la variable
CMAKE_CXX_FLAGS,
y al funcionar y no dar problemas al resto de personas lo mantuve así.


*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?*

Esto es debido a que PKG_CHECK_MODULES encuentra aquellas dependencias que
han sido instaladas vía paquete (.deb), sin embargo, si alguien decide
instalarlo descargando directamente el código fuente se hacía necesario un
CMakeLists.txt dónde especificar las rutas para encontrar librerías y
cabeceras.
*
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.*

Si  mal no recuerdo, he probado a realizar lo que comentas (o sería algo
similar) sin éxito, si sabes que así se pueden definir esas dependencias
estaría perfecto. Tenemos una herramienta, CMake, muy buena para la
construcción de todo el software, y existe una base que funciona, a partir
de aquí, cualquier mejora es bien recibida :-).

Un saludo!!

Maikel.


2012/12/17 Luis Roberto Morales <lr.morales.iglesias en gmail.com>

> 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
>
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20121218/51cef8e4/attachment.htm 


More information about the Jde-developers mailing list