<div dir="ltr"><div>Hola,<br><br><div style="margin-left:40px">Ya lo he probado con cameraserver y viewer y parecen funcionar correctamente.<br>El CMakeLists de components sería algo de este estilo<br><br></div><div style="margin-left:40px">
<div style="margin-left:40px"><span style="font-family:courier new,monospace">list_subdirectories( LIST_COMPONENTS ${CMAKE_CURRENT_SOURCE_DIR} 1)<br><br>IF(NOT DEFINED build_jderobot-default)<br>        SET(build_jderobot-default ON)<br>
ENDIF(NOT DEFINED build_jderobot-default)<br><br>FOREACH (component ${LIST_COMPONENTS})<br>        SET(build_jderobot_${component} ${build_jderobot-default} CACHE BOOL &quot;Build component ${component}&quot;)<br>        IF(build_jderobot_${component})<br>
                ADD_SUBDIRECTORY (${component})<br>        ENDIF(build_jderobot_${component})<br>ENDFOREACH()<br></span></div><br>donde la primera parte lo único que hace es permitir decidir si se quieren compilar o no por defecto todos los componentes; y la segunda es la que genera de forma automática y comprueba cada una de las variables, siendo estas del formato &quot;build_jderobot_<span style="font-family:courier new,monospace">DirectorioDelComponente</span>&quot;<br>
<br></div><div style="margin-left:40px">Para alguien que quiera compilar todo es prácticamente transparente, ya que se establecería todo a verdadero y funcionaría como a hasta ahora.<br><br><br></div><div style="margin-left:40px">
Efectívamente sería el equivalente de ir manualmente por todos los directorios de interés haciendo make; sin embargo esto se lanza desde donde hayas comenzado la cadena de cmake para todos los componentes que quieras activar y mantiene en la caché de cmake estas elecciones.<br>
</div><div style="margin-left:40px"><br></div><br></div>Un saludo,<br><div><div style="margin-left:40px">Roberto<br></div><div class="gmail_extra">
<br><br><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">El jue, 19-09-2013 a las 19:09 +0200, Luis Roberto Morales escribió:<br>


&gt;<br>
&gt; Buenas tardes,<br>
<br>
Hola!<br>
<div><br>
&gt;         últimamente he visto en la lista que hay gente que, como yo,<br>
&gt;         prefiere compilar sólo algunos componentes de jderobot por<br>
&gt;         unos u otros motivos.<br>
<br>
</div>Tener en cuenta que a día de hoy se puede compilar por componentes, sólo<br>
requiere lanzar el cmake principal desde el root y listo. Además el<br>
cmake . principal no pide obligatoriamente todas las dependencias, si no<br>
tienes openni, o player o gazebo, no te va a compilar esos componentes.<br>
<div><br>
&gt;         Entiendo que mantener un cmake por componente no solo es<br>
&gt;         duplicar esfuerzo sino tambien repetir código de cmake y por<br>
&gt;         tanto una fuente más de fallo.<br>
<br>
</div>Además añadele que luego nadie lo mantiene, la gente va y viene y es muy<br>
difícil mantener algo estable. Por eso casi todas las decisiones tienen<br>
muy en cuenta el mantenimiento, no sólo el desarrollo. Para que os<br>
hagáis una idea, la mayoría de lo que está en testing ni compila ni<br>
funciona.<br>
<div><br>
&gt;<br>
&gt;         Por ello propongo algo que puede resultar interesante<br>
&gt;         estudiarlo:<br>
&gt;<br>
&gt;<br>
&gt;         CMake permite declarar variables cuyo resultado se almacena en<br>
&gt;         caché, lo que permite modificar mediante parámetros o entornos<br>
&gt;         como ccmake; esto es lo que utilizan librerías como OpenCV<br>
&gt;         para permitir compilar partes de la misma.<br>
<br>
</div>Si, lo que tiene mucho sentido porque openCV puede tardar entre 30-50min<br>
depende del PC. Jderobot tarda alrededor de 2-3min.<br>
<br>
El tiempo de compilación, duplicidad de cmakes y esfuerzos en mantenerlo<br>
son las razones de peso que tenemos siempre en cuenta para tomar ciertas<br>
decisiones de infraestructura.<br>
<div><br>
&gt;<br>
&gt;         He estado haciendo alguna prueba y estas &quot;variables&quot; se pueden<br>
&gt;         crear de forma dinámica, con un valor predeterminado por<br>
&gt;         defecto, lo que permitiría definir variables del estilo<br>
&gt;         &quot;build_componente&quot; y pornerlas a ON por defecto, dejando a<br>
&gt;         quien quiera establecer dichas variables a OFF si lo cree<br>
&gt;         conveniente, permitiendo así una compilación &quot;a la carta&quot;.<br>
<br>
</div>Algo parecido había antes, donde en el CMakeList principal se definia<br>
qué componentes compilar, y había que estar modificandolo por si<br>
fallaban dependencias o había algún error. Antes si se añadía un<br>
componente había que especificarlo en el CMakeList, ahora es automático.<br>
<br>
Nos estamos moviendo a otro entorno diferente, donde el cmake detecta<br>
que si no hay ciertas dependencias instaladas desactiva auomáticamente<br>
ciertos componentes. Y además si quieres compilar un sólo componente,<br>
puedes, solo tienes que ir a su directorio y hacer el make después del<br>
cmake .<br>
<div>&gt;<br>
&gt;<br>
&gt;         La prueba en concreto la he estado haciendo en el bucle que<br>
&gt;         resuelve los componentes, pero me quedaría comprobar que no<br>
&gt;         supone ningún problema añadido. De ser así, sería añadir 3<br>
&gt;         líneas de código al cmake que hace dicho bucle.<br>
&gt;<br>
&gt;         ¿qué os parece?<br>
<br>
</div>Cuando lo tengas (con un par de componentes es suficiente) mándame el<br>
parche y lo probamos, que me gustaría echarle un ojo y lo vemos.<br>
<br>
Además, me gustaría que compilases un componente de la siguiente manera<br>
y me cuentes que partes se diferencia de lo que estás haciendo tú, o qué<br>
cosas no te gustan. Incluso la parte de compilación de interfaces y libs<br>
se podría meter en una regla de cmake para ser más simple si cabe.<br>
<br>
$ cmake .<br>
<br>
$ cd src/stable/interfaces<br>
$ make<br>
$ cd src/stable/libs<br>
$ make<br>
<br>
Y luego puedes compilar únicamente tu componente<br>
$ cd src/stable/components/kinectViewer<br>
$ cd make<br>
<br>
Gracias por tus aportes!<br>
<br>
Un saludo<br>
&gt;<br>
&gt;<br>
&gt;  Un saludo,<br>
&gt;<br>
&gt;         Roberto<br>
&gt; _______________________________________________<br>
&gt; Jde-developers mailing list<br>
&gt; <a href="mailto:Jde-developers@gsyc.es" target="_blank">Jde-developers@gsyc.es</a><br>
&gt; <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>
<span><font color="#888888"><br>
--<br>
Roberto Calvo Palomino        | Robotics Lab (GSyC)<br>
R&amp;D Android Mobile Engineer   | Universidad Rey Juan Carlos<br>
<br>
Twitter: @rocapal<br>
Linkedin: <a href="http://www.linkedin.com/in/rocapal" target="_blank">http://www.linkedin.com/in/rocapal</a><br>
<br>
</font></span></blockquote></div><br></div></div></div>