[Jderobot] Compilación por componentes
Luis Roberto Morales
lr.morales.iglesias en gmail.com
Lun Sep 23 17:25:04 CEST 2013
Hola,
Ya lo he probado con cameraserver y viewer y parecen funcionar
correctamente.
El CMakeLists de components sería algo de este estilo
list_subdirectories( LIST_COMPONENTS ${CMAKE_CURRENT_SOURCE_DIR} 1)
IF(NOT DEFINED build_jderobot-default)
SET(build_jderobot-default ON)
ENDIF(NOT DEFINED build_jderobot-default)
FOREACH (component ${LIST_COMPONENTS})
SET(build_jderobot_${component} ${build_jderobot-default} CACHE
BOOL "Build component ${component}")
IF(build_jderobot_${component})
ADD_SUBDIRECTORY (${component})
ENDIF(build_jderobot_${component})
ENDFOREACH()
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 "build_jderobot_DirectorioDelComponente"
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.
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.
Un saludo,
Roberto
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
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20130923/d007e8fd/attachment.htm
More information about the Jde-developers
mailing list