Jolouster
Come, bebe y ve el bien por todo tu duro trabajo

Tutorial CMake 2 - Uso de variables. Controlar la versión del proyecto

Autor Jonathan López - November 7, 2019

En este artículo se muestra cómo controlar la versión de nuestro proyecto desde la configuración de CMake.

Asi de paso se sientan las bases para el uso de variables y otras interesantes funciones de CMake que después nos darán mucho juego.

Partimos del proyecto que creamos en el artículo anterior (“Introducción a CMake (1)”).

~/proyectoTest
    |
    |-> build/
    |-> main.cpp
    |-> CMakeLists.txt

Uso de variables en CMake

En el archivo de configuración de CMakeLists.txt podemos definir variables que después podremos utilizar en nuestro código fuente para realizar compilaciones condicionales o para cualquier otra cosa que se nos pueda ocurrir.

Como ejemplo vamos a definir la versión del proyecto con este sistema.

En CMakeLists.txt definimos las variables de esta manera:

set (nombre_variable_descriptivo 23)

En nuestro ejemplo vamos a declarar 2 variables:

set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)

Perfecto, ya tenemos nuestras variables. Para utilizarlas en nuestro programa, crearemos un archivo en el que usaremos estas variables. Al construir el proyecto, CMake al pasar por éste, sustituirá las variables por los valores que les hayamos dado y “creará” otro archivo con el nombre que nosotros queramos con estos valores.

Esto se hace con las siguientes instrucciones:

configure_file (archivoEntrada archivoSalida)

Ahora para hacer uso de esta instrucción hay que saber que CMake por defecto también tiene sus propias variables. Una de ellas es PROJECT_SOURCE_DIR. Esta variable nos dice el directorio “raíz” de nuestro proyecto. La utilizamos de la siguiente manera:

configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_SOURCE_DIR}/config.h)

Esta línea lo que hace es acceder del contenido de “config.h.in”, sustituir las variables que usaremos en este archivo por el valor final que tendrán.

Ahora cuando las utilicemos se entenderá mejor. Creamos el archivo config.h.in y en él escribimos:

#define VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define VERSION_MINOR @Tutorial_VERSION_MINOR@

Cuando construyamos el proyecto con CMake, al llegar aquí, sustituirá @Tutorial_VERSION_MAJOR@ por un 1 y @Tutorial_VERSION_MINOR@ por un 0 y creará con esta información el archivo config.h de forma automática.

Ahora en nuestro main.cpp podríamos tener:

#include <iostream>
#include "config.h"  // Archivo generado automáticamente

int main () {
    std::cout << "Hola mundanal ruido!" << std::endl;
    std::cout << "Versión: " << VERSION_MAJOR << ":" << VERSION_MINOR << std::endl;

    return 0;
}

Podemos construir el proyecto. En la terminal:

~/proyectoTest$ cmake --build build

Ejecutamos:

~/proyectoTest$ ./build/Tutorial

Resultado:

Hola mundanal ruido!
Versión: 1.0

Conclusión

Recapitulamos un poco:

  • Para establecer variables: set (nombre_variable valor)
  • Para usar variables: ${nombre_variable} o @nombre_variable@
  • Crear un archivo de cabecera con los valores de nuestras variables: configure_file(archivo_con_variables archivo_con_valores)

Con esto es con lo que nos debemos quedar después de leer todo este artículo.

Ahora ya sabemos cómo usar variables y cómo emplearlas en nuestro proyecto.

El ejemplo es muy básico y sencillo pero ilustra muy bien los conceptos. A partir de aquí se puede ir complicando y haciendo más elaborado todo nuestro entorno de desarrollo.


Te invito a que dejes un comentario más abajo y me digas que opinas al respecto.