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