[Jderobot] Compilación por componentes

Roberto Calvo rocapal en gsyc.urjc.es
Mar Sep 24 18:51:05 CEST 2013


El lun, 23-09-2013 a las 17:25 +0200, Luis Roberto Morales escribió:
> 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"

¿Eso implica generar tantas variables de esas como componentes quiera
compilar verdad? Si quiero compilar cameraviewer y cameraserver tendrías
que generar:
 build_jderobot_cameraviewer
 build_jderobot_cameraserver

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

En teoría el "cmake ." se lanza siempre sobre el root del proyecto.
Qué pasa con libs e interfaces ¿Cómo lo compilas?

Para verlo más claro, imaginate que bajamos el repo completo de JDEROBOT
y está incluido el cambio que has puesto más arriba. Escríbeme todos los
comandos shell que hay que realizar para compilar (ponle 4 componentes,
los que quieras).

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