Tutorial Script CMake - Parte 1

Esta es la segunda parte del tutorial CMake en donde veremos los posibles comandos que podemos utilizar en un archivo CMakeLists.txt para crear nuestros proyectos de software, aprenderemos a utilizar variables, crear librerías y utilizarlas en nuestro proyecto, veremos las expresiones condicionales, y muchas otras características disponibles en esta herramienta.

Proyectos

El comando project(nombre_proyecto) crea un proyecto llamado nombre_proyecto, si lo deseamos podemos indicar el lenguaje de programación que se utilizará en el mismo, project(project_one CXX) donde CXX hace referencia a C++, otros lenguaje pueden ser C.

Programas ejecutables y librerías

Al crear un proyecto nuestro objetivo puede ser crear una programa ejecutable o una librería a partir del código fuente indicado, para crear un ejecutable, .exe, en Windows, en otros sistemas varía, disponemos del comando: add_executable(primer_exe main.cpp helper.hpp) donde primero indicamos el nombre seguido de todos los archivos requeridos para compilar el ejecutable.

Si deseamos crear una librería usaremos el comando add_library(lib_name STATIC lib.cpp) primero establecemos el nombre, seguido de STATIC para crear una librería estática o SHARED para una librería compartida o DLL, finalizamos indicando los archivos requeridos para compilar la librería.

Para enlazar una librería a un proyecto ejecutable usamos el comando: target_link_libraries(primer_exe lib_name) con esto logramos que nuestro programa ejecutable llamado primer_exe pueda utilizar la librería llamada lib_name.

Variables

Para crear o modificar una variable usaremos el comando: SET(NOMBRE_VAR VALOR) donde primero indicamos el nombre y luego su valor, si la variable no existe se creará de lo contrario solo se modificará su valor.

Si deseamos obtener el valor de una variable existente tendremos que utilizar la siguiente sintaxis: ${NOMBRE_VAR}, este será reemplazado por el valor de la variable o por una cadena vacía si la misma no existe.

Es posible acceder al valor de una variable de entorno con la sintaxis: $ENV{NOMBRE_VAR}.

# crear la variable 
set(VAR_1 "abc...xyz")

# verificar si existe la variable
if(VAR_1)
    # mostrar el mensaje con el valor de la variable
    message("El valor de var_1 es: ${VAR_1}")
endif()

# mostrar el valor de la variable de entorno PATH 
message("El valor de path es: $ENV{PATH}")

Otros tipos de variables que maneja CMake son las llamadas cache entry, estas son variables cuyos valores pueden ser modificados por el usuario, tienen la siguiente forma:

set(<variable> <value>... CACHE <type> <docstring> [FORCE])

Indicaremos el nombre de la variable seguido de su valor igual que en el caso anterior, adicionalmente la palabra CACHE seguido del tipo de variable y una breve descripción de la misma, entre los posibles tipos de variables tenemos:

  • BOOL tiene dos posibles valores ON/OFF, en cmake-gui se muestra como un checkbox.
  • FILEPATH ruta que apunta aun archivo en disco.
  • FILE ruta que apunta a un directorio o carpeta.
  • STRING almacena una cadena de texto.
set(VAR_0 OFF CACHE BOOL "Descripcion breve de la variable")
set(VAR_2 "../data/image.png" CACHE FILEPATH "Descripcion breve de la variable")
set(VAR_3 "../resources" CACHE PATH "Descripcion breve de la variable")
set(VAR_4 "" CACHE STRING "Descripcion breve de la variable")
set(VAR_5 "" CACHE INTERNAL "Descripcion breve de la variable")

variables cmake

Las variables tipo INTERNAL no se muestran en la interfaz gráfica de CMake, como su nombre lo indica son para uso interno.

Expresiones Condicionales (if, else)

Nos permite ejecutar un código si se cumple con una determinada condición, se inicia con la sentencia if(expression) y termina con endif(), todo lo que se encuentre dentro de estas dos expresiones se ejecutará si expression es evaluada como verdadera, podemos escribir expresiones condicionales mas complejas agregando elseif(expression) y else().

Debemos tener presente que podemos utilizar los operadores lógicos AND, OR y NOT.

# expresiones condicionales 
# ejecutar un comando dependiendo del compilador
if(MSVC)
    message("Compilador ID: (MSVC)")
elseif(MINGW OR BORLAND)
    message("Compilador ID: (MinGW, Borland)")
else()
    message("Compilador ID: (?)")
endif()

Las variables MSVC, MINGW, BORLAND son creadas por CMake y son utilizadas para identificar la herramienta de construcción que estamos utilizando, del mismo modo disponemos de variables que identifican el sistema, como: LINUX, APPLE, WIN32, otros.

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Detección de rostros

Instalar OpenCV para Python en Windows