[Jderobot] Compilación por componentes
Luis Roberto Morales
lr.morales.iglesias en gmail.com
Mie Sep 25 01:25:49 CEST 2013
Hola,
si, se generaría una variable por componente de forma automática.
Librerías e interfaces responden a la cadena actual, ya que la modificación
se realizaría sobre el CMakeLists de components y, para cuando cmake llega
ahí, ya se han procesado los otros dos cmake como hasta ahora.
Para cmake estándar y los componentes basic_component, cameraserver,
cameraview y recorder los pasos serían (suponiendo el caso de que se quiera
compilar desde el raíz del repositorio y el usuario ya se encuentre ahí
localizado):
$ cmake -Dbuild_jderobot-default=OFF -Dbuild_jderobot_basic_component=ON
-Dbuild_jderobot_cameraserver=ON -Dbuild_jderobot_cameraview=ON
-Dbuild_jderobot_recorder=ON .
$ make
Donde:
- -Dbuild_jderobot-default=OFF desactiva la compilación por defecto de
todos los componentes; por defecto está activa para que sea transparente
para el que quiera compilar todo con cmake . && make
- -Dbuild_jderobot_XXXX=ON activa la compilación para el componente XXXX.
- Independientemente de lo que se indique interfaces y librerías siempre
compilan, ya que son procesadas por CMakeLists distintos al modificado.
- Las normas de los CMakeLists internas a cada componente (por ejemplo:
la no compilación si falta alguna librería definida dentro del CMakeList
del componente) siguen aplicando.
Si en lugar de cmake se utilizara ccmake, sólo habría que especificar la
primera variable (si se desea) y rellenar el resto desde dentro de la GUI:
$ ccmake -Dbuild_jderobot-default=OFF .
[c]onfigure
[e]xit help
[Selección de variables varias]
[c]onfigure
[e]xit help
[g]enerate and exit
$ make
Un saludo,
Roberto
El 24 de septiembre de 2013 18:51, Roberto Calvo <rocapal en gsyc.urjc.es>escribió:
> 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
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20130925/b71201d1/attachment-0001.htm
More information about the Jde-developers
mailing list