Guía rápida de CMake en GNU/Linux
Esta receta es una guía rápida de CMake. Se trata de una herramienta para la construcción automática de proyectos software, facilitando su portabilidad.Unas herramientas parecidas son las conocidas como "Autotools". CMake es, a juicio de muchos, más sencillo de utilizar que las Autotools siendo, además, muy versátil, potente y escalable. Y como muestra de ello, proyectos como KDE se han pasado a CMake de forma satisfactoria.
Introducción
Antes de comenzar a utilizar CMake es recomendable tener en cuenta algunas cuestiones. En primer lugar, CMake necesita como entrada un fichero llamado CMakeLists.txt. Este fichero contiene un programa que describe qué dependencias deben cumplirse (el configure) y cómo se construye el proyecto (una especie de Makefile de alto nivel). El lenguaje que se utiliza para crear este programa es propio de CMake. Se trata de un lenguaje imperativo, que se ejecuta de forma secuencial y cuya sintaxis es bastante regular y simple:comando1 (arg1 arg2)
comando2 (arg1 arg2 arg3 ...)
# apt-get install cmake
Hola mundo!
Si en el CMakeLists.txt se describe un programa, entonces debe ser posible hace un "Hola Mundo", ¿verdad?. Efectivamente, se puede. Crea el archivo CMakeLists.txt con el siguiente contenido:SET(saludo "Hola Mundo")
MESSAGE(${saludo})
$ cmake .
cleto@michi:/tmp/cmake$ cmake .
-- 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
Hola Mundo
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/cmake
cleto@michi:/tmp/cmake$ cmake .
Hola Mundo
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/cmake
SET(saludo1 "Hola Mundo")
SET(saludo2 Hola Mundo)
MESSAGE(${saludo1})
MESSAGE(${saludo2})
MESSAGE("${saludo2}")
cleto@michi:/tmp/cmake$ cmake .
Hola Mundo
HolaMundo
Hola;Mundo
[...]
SET(saludo2 Hola;Mundo) # Lo mismo que SET(saludo2 Hola Mundo)
Makefile generado
Por defecto, en sistema UNIX como GNU/Linux, CMake genera un Makefile con diferentes objetivos. Si ejecutas make para el ejemplo del "Hola Mundo", obviamente, no pasará nada ya que hasta el momento no se ha creado un programa para compilar proyectos.Limpiando todo lo generado
Si has mirado todo lo que genera CMake te habrás podido asustar. Si pones el archivo CMakeLists.txt en el mismo sitio donde tienes el código fuente de tu aplicación, cuando quieras eliminar todo lo generado podrá ser realmente tedioso e incómodo. Para ello, se recomienda hacer lo siguiente:$ ls
CMakeLists.txt
$ mkdir build
$ cd build
$ cmake ..
Ejemplos
Vamos a utilizar CMake para lo que realmente sirve: construir automáticamente proyectos. Cada uno de los siguientes ejemplos muestran cómo satisfacer las necesidades más habituales a la hora de construir ejecutables, librerías, etc. así como su instalación y configuración. Se recomienda una lectura secuencial de las mismas:- Compilar un Hola Mundo! con CMake
- Construir una librería estática y/o dinámica con CMake
- Instalar software con CMake
- Linkado de librerías con CMake
- Compilando aplicaciones ZeroC Ice con CMake
Referencias
[ show comments ]
blog comments powered by Disqus