[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