[Jderobot] Compilación por componentes

Roberto Calvo rocapal en gsyc.urjc.es
Vie Sep 20 10:26:59 CEST 2013


El jue, 19-09-2013 a las 19:09 +0200, Luis Roberto Morales escribió:
> 
> Buenas tardes,

Hola!

>         últimamente he visto en la lista que hay gente que, como yo,
>         prefiere compilar sólo algunos componentes de jderobot por
>         unos u otros motivos.

Tener en cuenta que a día de hoy se puede compilar por componentes, sólo
requiere lanzar el cmake principal desde el root y listo. Además el
cmake . principal no pide obligatoriamente todas las dependencias, si no
tienes openni, o player o gazebo, no te va a compilar esos componentes.

>         Entiendo que mantener un cmake por componente no solo es
>         duplicar esfuerzo sino tambien repetir código de cmake y por
>         tanto una fuente más de fallo.

Además añadele que luego nadie lo mantiene, la gente va y viene y es muy
difícil mantener algo estable. Por eso casi todas las decisiones tienen
muy en cuenta el mantenimiento, no sólo el desarrollo. Para que os
hagáis una idea, la mayoría de lo que está en testing ni compila ni
funciona.

>         
>         Por ello propongo algo que puede resultar interesante
>         estudiarlo:
>         
>         
>         CMake permite declarar variables cuyo resultado se almacena en
>         caché, lo que permite modificar mediante parámetros o entornos
>         como ccmake; esto es lo que utilizan librerías como OpenCV
>         para permitir compilar partes de la misma.

Si, lo que tiene mucho sentido porque openCV puede tardar entre 30-50min
depende del PC. Jderobot tarda alrededor de 2-3min.

El tiempo de compilación, duplicidad de cmakes y esfuerzos en mantenerlo
son las razones de peso que tenemos siempre en cuenta para tomar ciertas
decisiones de infraestructura.

>         
>         He estado haciendo alguna prueba y estas "variables" se pueden
>         crear de forma dinámica, con un valor predeterminado por
>         defecto, lo que permitiría definir variables del estilo
>         "build_componente" y pornerlas a ON por defecto, dejando a
>         quien quiera establecer dichas variables a OFF si lo cree
>         conveniente, permitiendo así una compilación "a la carta".

Algo parecido había antes, donde en el CMakeList principal se definia
qué componentes compilar, y había que estar modificandolo por si
fallaban dependencias o había algún error. Antes si se añadía un
componente había que especificarlo en el CMakeList, ahora es automático.

Nos estamos moviendo a otro entorno diferente, donde el cmake detecta
que si no hay ciertas dependencias instaladas desactiva auomáticamente
ciertos componentes. Y además si quieres compilar un sólo componente,
puedes, solo tienes que ir a su directorio y hacer el make después del
cmake .
>         
>         
>         La prueba en concreto la he estado haciendo en el bucle que
>         resuelve los componentes, pero me quedaría comprobar que no
>         supone ningún problema añadido. De ser así, sería añadir 3
>         líneas de código al cmake que hace dicho bucle.
>         
>         ¿qué os parece?

Cuando lo tengas (con un par de componentes es suficiente) mándame el
parche y lo probamos, que me gustaría echarle un ojo y lo vemos.

Además, me gustaría que compilases un componente de la siguiente manera
y me cuentes que partes se diferencia de lo que estás haciendo tú, o qué
cosas no te gustan. Incluso la parte de compilación de interfaces y libs
se podría meter en una regla de cmake para ser más simple si cabe.

$ cmake .

$ cd src/stable/interfaces
$ make
$ cd src/stable/libs
$ make

Y luego puedes compilar únicamente tu componente
$ cd src/stable/components/kinectViewer
$ cd make

Gracias por tus aportes!

Un saludo
>         
>         
>  Un saludo,
> 
>         Roberto
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers

-- 
Roberto Calvo Palomino        | Robotics Lab (GSyC) 
R&D Android Mobile Engineer   | Universidad Rey Juan Carlos

Twitter: @rocapal 
Linkedin: http://www.linkedin.com/in/rocapal



More information about the Jde-developers mailing list