[Jderobot-dev] Problema al compilar Server.cpp
Mikel González
m.gonzalezbai en gmail.com
Mie Feb 27 00:36:37 CET 2013
Hola Jaime,
veo que tienes un pequeño lío con el uso de CMake, lo cual es normal, es
una herramienta muy potente pero hace falta práctica para domesticarla ;-).
Como diría JM, aquí van mis dos centavos para que entiendas un poco
mejor esta herramienta, aunque te sugiero que le eches un vistazo a su
manual [1] donde te quedará todo más claro.
El proceso de generación de un binario está dividido en dos etapas, por
una parte la compilación y por otra el enlazado. Para la compilación es
necesaria definir dónde se encuentran las cabeceras (.h) donde están los
símbolos que utilizas en tus ficheros fuentes, con CMake ésto se define
utilizando:
include_directories()
Según veo en tu sintaxis de tu CMakeLists.txt, has mezclado directorios
donde realmente se encuentran este tipo de ficheros:
/usr/local/include/jderobot
con directorios donde se encuentran librerías, y no cabeceras:
/usr/local/lib
mientras que el donde se encuentran las librerías forma parte del
enlazado y se indica de la siguiente manera:
link_directories()
Por último y para terminar el proceso (a parte de definir el ejecutable)
es necesario especificar de cuales librerías hace uso tu aplicación,
para ello tenemos:
TARGET_LINK_LIBRARIES()
Resumiendo, especificamos dónde están las cabeceras, dónde están las
librerías y qué librerías son necesarias.
Si tratamos de seguir un patrón para todos los ficheros CMakeLists.txt
podemos dividir su definición en varias etapas:
1) Definir los ficheros fuentes que conforman tu aplicación:
> SET( SOURCE_FILES Printer.cpp Server.cpp)
Bien hecho.
2) Definir los directorios donde se encuentran las cabeceras incluídas
en tu aplicación. Puesto que tu aplicación hace uso de ICE, es necesario
especificar donde se encuentran las cabeceras de estas librerías. Para
facilitar la tarea de futuros programadores, añadí en el repositorio un
directorio llamado "Deps/" que incluye una carpeta, "ice", donde se
establecen de forma óptima todas las rutas en las que se encuentra ICE
en tu sistema, tanto cabeceras como librerías. De tal forma que el
código necesario para hacer uso de ICE es:
SET
<http://www.cmake.org/cmake/help/cmake2.6docs.html#command:set>(DEPS_DIR#Directorio
donde se encuentra la carpeta Deps)
include
<http://www.cmake.org/cmake/help/cmake2.6docs.html#command:include>(${DEPS_DIR}/ice/CMakeLists.txt)
Al igual ocurre con gearbox, OpenCV y otras dependencias que puedes
encontrar ya resueltas en ese directorio.
Para aquellas cabeceras que no están ya definidas en el directorio
"Deps/", debes incluir la ruta de donde se encuentran haciendo uso, como
ya he citado, de la sentencia:
include_directories(
/usr/local/include
/usr/local/include/jderobot
#etc, etc
)
3) Definir donde se encuentran las librerías de las que vas a hacer uso.
En este caso ocurre como en el punto 2), si has hecho uso del directorio
Deps/ para alguna dependencia no será necesario especificar nada, si por
el contrario debes especificarlo a mano:
link_directories(
/usr/local/lib
/usr/local/lib/jderobot
# etc, etc
)
4) Definir el ejecutable a partir de los ficheros fuentes fijados en el
paso 1):
> add_executable (server ${SOURCE_FILES})
5) Especificar las librerías de las que vas a hacer uso. Nuevamente, si
has hecho uso del directorio Deps/, las librerías de ICE quedan
almacenadas en una variable (ZeroCIce_LIBRARIES), con lo que simplemente
hará falta incluir esta variable en la sentencia
"TARGET_LINK_LIBRARIES". Te dejo un ejemplo de como especificar que tu
ejecutable hace uso de ICE y de otra librería que hay que especificar
manualmente:
TARGET_LINK_LIBRARIES(
/usr/local/lib/jderobot/libcolorspacesmm.so # Añadida manualmente
${ZeroCIce_LIBRARIES} # Añadida haciendo uso de la variable
)
Bueno, espero que mi sermón te sirva de ayuda para entender un poco
mejor la herramienta CMake y te ayude en tus futuras compilaciones :-).
Un saludo.
Mikel.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20130227/1914e885/attachment-0001.htm
More information about the Jde-developers
mailing list