martes, 5 de noviembre de 2013

Como trabajar con CMake en Eclipse?

Hacia tiempo que queria cambiar otra vez a eclipse, por que aunque netbeans me gusta, lo encuentro limitado. La ventaja que tiene netbeans es su soporte nativo para CMake. En cambio, con eclipse tenia que limitarme a escribir mi archivo CMakeLists.txt y crear el makefile para despues incluirlo en eclipse. Hace poco encontré una manera alternativa de usar CMake desde dentro de eclipse que completaba la cadena. Vamos a ver como se hace

1.- Crear un nuevo proyecto

Creamos un nuevo proyecto C/C++ en eclipse desde 0. Es decir, no usamos la opción de crear un "Makefile Project with Existing Code".
Le vamos a añadir codigo fuente de ejemplo:
main.cpp
#include "main.h"
int main() {
); return EX
greetings (IT_SUCCESS;
}
main.h
#include <iostream>
void greetings() {
a" << std::endl; }
std::cout << "Ho
l
Ademas del código vamos a añadir un CMakeLists.txt directamente en eclipse.
cmake_minimum_required(VERSION 2.8)
project(cmake_test) SET( TEST_SRC
rc/main.h ) add_executable(te
src/CMakeInEclipseTest.cpp
sst_common ${TEST_SRC})



2.- Creando los targets de eclipse

Vamos a aprovechar que podemos ejecutar instrucciones de CMake desde linea de comandos con la opcion -E para usarlo con los targets de eclipse. Primero vamos a ver la ventana de Make Target en Window | Show View | Make Target . Debe aparecer a la derecha.


Ahora seleccionamos la carpeta que sera la carpeta de trabajo de CMake. Hacemos click derecho y seleccionamos Create Make Target.
Vamos a ponerle un nombre a este target CMake Release
En la ventana Make Target, quitamos la selección "Same as the target name", y nos aseguramos que el campo este vacio.


En build command, deseleccionamos Use Builder settings y escribimos en build command algo como
cmake -E chdir ${ProjDirPath}/build/Release/ cmake -G "Unix Makefiles" ../../ -DCMAKE_BUILD_TYPE:STRING=Release

En este momento quedaria asi.
Lo que intento es que el código intermedio y caches generadas por cmake quede en una carpeta "build" para que no ensucie la carpeta de proyecto. Dentro de buid estará "Release" y "Debug" donde se generan las versiones correspondientes. 

Para probarlo, nos aseguramos de que  ${ProjDirPath}/build/Release existe y si hacemos doble click deberiamos ver en la consola de Eclipse la ejecución de CMake.

Podemos crear más targets que perfilen la construcción del proyecto (Debug, con diferentes flags, ...)





3.- Configurar el Eclipse CDT Builder

Hacemos click derecho en el proyecto y vamos a las preferencias. Vamos a C/C++ Build y y alli seleccionamos Configuration: [All configurations]. Seleccionamos la pestaña Builder Settings  y quitamos el check de Use default build command. En build command ponemos make -C build/${ConfigName} . Desactivamos Generate Makefiles automatically y dejamos en blanco Build directory. En resumen quedaria algo asi: 

La pestaña de bahaviour la dejamos igual. Le damos a apply y a OK y ahora nos vamos project -> build project  y vemos como el proyecto se construye. Con esto deberiamos tener toda la cadena CMake + Make + codigo en funcionamiento en nuestro Eclipse.