Antes de empezar debemos estar seguros de haber descargado e instalado la biblioteca PCL.
Ajustes del proyecto
Una vez tengamos el código preparado para ser compilado, lo guardaremos en una carpeta en la cual crearemos un archivo nuevo llamado CMakeLists.txt, si nuestro código se llama codigo.cpp debemos copiar en el nuevo archivo de la siguiente manera:__________________________________________________
cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(codigo) find_package(PCL 1.6 REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable (codigo codigo.cpp) target_link_libraries (codigo ${PCL_LIBRARIES})
____________________________________________________
Explicación
Explicamos a continuación lo que hemos hecho en cada una de las líneas.cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
En esta linea indicamos la versión de cmake que necesitamos, aunque nosotros hayamos solicitado una versión 2.8 si el proyecto es muy básico sera suficiente con una versión 2.6. aun así es necesario especificar la versión que requerimos para compilar.
Luego solicitamos los paquetes de PCL que necesitamos, si no indicamos ninguno por defecto los tomara todos, pero podríamos solicitar uno solo añadiendo al final los paquetes que deseamos utilizar, si además añadimos REQUIRED debemos tener en cuenta que si no esta la versión de PCL que indicamos fallará la compilación.
Cuando estamos en los paquetes de PCL, teneos las siguientes variables:
project(codigo)
Aquí indicamos el nombre del proyecto, y también nos da la posibilidad de indicar a cmake el directorio de origen (MY_GRAND_PROJECT_SOURCE_DIR) y el directorio desde el que se invoca cmake (MY_GRAND_PROJECT_BINARY_DIR).find_package(PCL 1.6 REQUIRED)
Luego solicitamos los paquetes de PCL que necesitamos, si no indicamos ninguno por defecto los tomara todos, pero podríamos solicitar uno solo añadiendo al final los paquetes que deseamos utilizar, si además añadimos REQUIRED debemos tener en cuenta que si no esta la versión de PCL que indicamos fallará la compilación.
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
Cuando estamos en los paquetes de PCL, teneos las siguientes variables:
- PCL_FOUND: activado a 1si hemos encontrado PCL, de lo contrario desactivado.
- PCL_INCLUDE_DIRS: ajuste de las rutas de acceso a las cabeceras y encabezados de dependencia de PCL.
- PCL_LIBRARIES: establecemos los archivos de cabecera y encabezados instalados en la biblioteca de PCL.
- PCL_LIBRARY_DIRS: establecemos las rutas de acceso de la biblioteca PCL y otras dependencias.
- PCL_VERSION: la versión de PCL que hemos encontrado.
- PCL_COMPONENTS: lista de todos los componentes disponibles.
- PCL_DEFINITIONS: enumera las definiciones de preprocesador necesarios y opciones del compilador.
add_executable (codigo codigo.cpp)
Aquí tratamos de que cmake, a partir del código inicial que es el archivo codigo.cpp en nuestro caso, cree un archivo ejecutable que el propio cmake se encargará de crear la extensión que necesaria según en el sistema operativo, para window .exe y para UNIX vacío.
target_link_libraries (codigo ${PCL_LIBRARIES})
El ejecutable que estamos construyendo hace llamada a funciones de PCL. Hasta ahora, sólo hemos incluido los encabezados PCL por lo que el compilador tiene los métodos que estamos llamando. También tenemos que hacer que el enlazador conozca las bibliotecas que se están incluyendo. Como se dijo antes ,se encontró las referencias a la biblioteca PCL usando las variables PCL_LIBRARIES, todo lo que queda es para activar la operación de enlace haciendo la llamada target_link_libraries (macro). PCLConfig.cmake utiliza una característica especial CMake llamado "EXPORT", que permite el uso de proyectos de objetivos de otros como si ellos mismos lo construyeran. Cuando se utiliza este tipo de objetivos que se llaman metas y actúa igual que toda otra meta importada.
Compilación del proyecto.
Si utilizamos la consola de Linux, lo normal es utilizar Ubuntu, tendremos que proceder de la siguiente manera:- Entramos en el archivo donde tenemos el proyecto (codigo.cpp) y el archivo CMakeLists.txt mediante el comando $cd ruta/carpeta
- Creamos una carpeta nueva cualquier nombre sirve en nuestro caso construcion con el comando $cd mkdir contrucion
- Luego entramos en la carpeta que hemos creado con el siguiente comando $cd construcion
- Luego preparamos la carpeta con los archivos necesarios para la compilación del proyecto mediante el comando $cmake ..
$cd ruta/carpeta
$cd mkdir contrucion
$cd construcion
$cmake ..
Si tenemos todo bien nos deberá de aparecer por consola lo siguiente:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- checking for module 'eigen3'
-- found eigen3, version 3.0.5
-- Found eigen: /usr/include/eigen3
-- Boost version: 1.46.1
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- iostreams
-- checking for module 'flann'
-- found flann, version 1.7.1
-- Found Flann: /opt/ros/groovy/lib/libflann_cpp_s.a
-- checking for module 'openni-dev'
-- found openni-dev, version 1.5.2.23~precise
-- Found openni: /usr/lib/libOpenNI.so
-- Found libusb-1.0: /usr/include
-- Found qhull: /usr/lib/libqhull.so
-- looking for PCL_COMMON
-- Found PCL_COMMON: /opt/ros/groovy/lib/libpcl_common.so
-- looking for PCL_KDTREE
-- Found PCL_KDTREE: /opt/ros/groovy/lib/libpcl_kdtree.so
-- looking for PCL_OCTREE
-- Found PCL_OCTREE: /opt/ros/groovy/lib/libpcl_octree.so
-- looking for PCL_SEARCH
-- Found PCL_SEARCH: /opt/ros/groovy/lib/libpcl_search.so
-- looking for PCL_SAMPLE_CONSENSUS
-- Found PCL_SAMPLE_CONSENSUS: /opt/ros/groovy/lib/libpcl_sample_consensus.so
-- looking for PCL_IO
-- Found PCL_IO: /opt/ros/groovy/lib/libpcl_io.so
-- looking for PCL_GEOMETRY
-- Found PCL_GEOMETRY: /opt/ros/groovy/include/pcl-1.6
-- looking for PCL_FEATURES
-- Found PCL_FEATURES: /opt/ros/groovy/lib/libpcl_features.so
-- looking for PCL_FILTERS
.
.
.
-- Configuring done
-- Generating done
-- Build files have been written to: /ruta/construcion
Luego para compilar el archivo debemos de ejecutar el siguiente comando en la consola:
$make
donde nos deberá aparecer los errores si los tenemos y por tanto no se producirá el ejecutable, o si toda esta correcto, nos deberá de aparecer las siguientes lineas:
Scanning dependencies of target codigo
[100%] Building CXX object CMakeFiles/cubo.dir/codigo.cpp.o
Linking CXX executable codigo
[100%] Built target codigo
Finalmente para poder utilizar el proyecto que hemos compilado debemos ejecutar de la siguiente manera:
$./codigo
Luego procederá según hayamos escrito el código.
Para el caso de window no procedemos por consola, por que tenemos que indicar donde y que archivos vamos a introducir, teniendo en cuenta que debemos introducir el archivo CMakeLists.txt como source code y en binary el código que tenemos en Visual Studio.
fuentes:

No hay comentarios:
Publicar un comentario