<div dir="ltr"><div><div><div><div><div><div>Hola Roberto,<br><br></div>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:<br>
<br><i>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).</i><br><br></div>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!!.<br>
<br><i>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</i><br><br></div>Pues tienes toda la razón, en un principio lo definí en la variable <span style="font-family:courier new,monospace">CMAKE_CXX_FLAGS, y al funcionar y no dar problemas al resto de personas lo mantuve así.<br>
<br></span><br><i>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?</i><br><br></div>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.<br>
<i><br>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.</i><br><br></div>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 :-).<br>
<br></div>Un saludo!!<br><br>Maikel.<br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2012/12/17 Luis Roberto Morales <span dir="ltr">&lt;<a href="mailto:lr.morales.iglesias@gmail.com" target="_blank">lr.morales.iglesias@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Buenas noches,<br><br><div style="margin-left:40px">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.<br>

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

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. <br><br>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<br>

<br><br><div style="margin-left:40px"><span style="font-family:courier new,monospace">set( CMAKE_CXX_FLAGS &quot;-Wno-deprecated -lGL -lGLU -lglut&quot; )<br><br>TARGET_LINK_LIBRARIES(<i>... </i><br>          ${opencv_LIBRARIES}<br>

</span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">          ...</span></span><span style="font-family:courier new,monospace"><br>      )<br><br></span></div>cuando también es válido<br>

<br><div style="margin-left:40px"><br><span style="font-family:courier new,monospace">set( CMAKE_CXX_FLAGS &quot;-Wno-deprecated&quot; )</span><br><span style="font-family:courier new,monospace"></span><br><span style="font-family:courier new,monospace">TARGET_LINK_LIBRARIES(<i>...<br>

          </i>&quot;GL&quot;</span><br><span style="font-family:courier new,monospace"><i>          </i>&quot;GLU&quot;</span><br><span style="font-family:courier new,monospace"><i>          </i>&quot;glut&quot;</span><br>

<span style="font-family:courier new,monospace">          ${opencv_LIBRARIES}</span><br><span style="font-family:courier new,monospace"></span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">          ...</span></span><span style="font-family:courier new,monospace"></span><br>

<span style="font-family:courier new,monospace">      )</span><br><span style="font-family:courier new,monospace"></span></div><br>y facilita ver/modificar las dependencias.<br><br><br>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?<br>

<br><br>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.<br>

<br><br></div>Gracias por vuestras respuestas,<br>Roberto<br><div style="margin-left:40px"><br><br></div>[1] <a href="https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition" target="_blank">https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition</a><br>

[2] <span style="font-family:courier new,monospace">cmake --help-module FindOpenGL</span> y <span style="font-family:courier new,monospace">cmake --help-module FindGLUT</span><br>
<br>_______________________________________________<br>
Jde-developers mailing list<br>
<a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
<a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
<br></blockquote></div><br></div>