Pensamientos y Libros

13 julio 2010

Esqueleto de un proyecto con CMake

Filed under: Sin categoría — Toni Cebrián @ 20:31
Tags: , ,

Cuando se crea un nuevo proyecto desde cero, hay muchas tareas que son repetitivas y tediosas. Crear los makefiles, definir la estructura del proyecto, etc… Normalmente lo que se suele hacer es dejar que sea el IDE que utilizamos quien realice esas tareas. Al utilizar CMake esa responsabilidad recae sobre el desarrollador. He creado un proyecto sencillo que sirva de esquelataje para la creación de nuevos proyectos C++.
Proyecto de ejemplo
Puedes acceder al código fuente del proyecto aquí. Símplemente clónalo y empieza a hackear.
Estructura de directorios
Desde hace poco he estado trabajando con Maven para desarrollar en Java. Soy fan de la idea de Convención sobre Configuración (CoC). Cuando estás codificando han cientos de cosas que tienes que tener en mente, por qué gastar preciosos ciclos de cerebro recordando en qué carpeta están esos ficheros de configuración que tu compañero creó la semana pasada. Lo que haces es acordar un convención arbitraria y te ciñes a ella. De repente tienes neuronas que se han liberado y que puedes utilizar para aprender el siguiente framework. A la hora de organizar las carpetas del proyecto he seguido las convenciones Maven lo que he podido, un gran CMakeLists.txt en la raíz del proyecto, una carpeta src divida a su vez en main y test divididas a su vez en subcarpetas por tecnología. Los ficheros objeto que se generan en la compilación están en una carpeta separada.
Tests unitarios
A la hora de proveer cierta funcionalidad, el proyecto crea una librería dinámica con la funcionalidad de una calculadora simple. Para probar que esta funcionalidad funciona correctamente, un test unitario se ha creado usando el framework CppUnit. El proyecto crea un driver de los tests llamado UnitTester. Este ejecutable puede ser ejecutado sin parámetros y ejecuta todos los tests que hubieran sido registrados previamente utilizando la macro CPPUNIT_TEST_SUITE_REGISTRATION. Si lo que quieres es ejecutar un único test tienes que pasarle ese nombre por la línea de comandos.
No uso la funcionalidad de unit testing CTest que proporciona CMake con lo que que make test no funciona en este proyecto. Prefería tener un ejecutable driver que lanzara los tests y que facilitara la utilización de otras herramientas como Valgrind.
Empaquetado
En la carpeta cmake hay dos scripts que definen las condiciones del empaquetado. Se pueden crear un RPM o un DEB únicamente comentando o descomentando las líneas correspondientes en el CMakeLists.txt
Desarrollo Futuro
Planeo continuar actualizando este esqueleto de proyecto en el futuro. Algunas cosas que seguro mejoraré son:

  • Encontrar una solución satisfactoria a ejecutar los tests utilizando CTest
  • Dado que CMake es un entorno crossplatform, comprobar que este proyecto puede funcionar correctamente en Windows o Mac, ya que actualmente sólo está probado en Linux.

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: