Introduccion
Este art铆culo trata sobre los programas de prueba y empaquetado que utilizan CMake, un conjunto flexible y vers谩til de utilidades para desarrollar diversos productos de software. Se recomienda encarecidamente que lea la primera y la segunda parte del manual para evitar malentendidos sobre la sintaxis y c贸mo funciona CMake.
Lanzamiento de CMake
Los siguientes son ejemplos del uso del lenguaje CMake que debe practicar. Experimente con el c贸digo fuente modificando los comandos existentes y agregando otros nuevos. Para ejecutar estos ejemplos, instale CMake desde el sitio web oficial .
Ejemplo de prueba
Como se mencion贸 anteriormente, CMake admite pruebas autom谩ticas de programas. Esta caracter铆stica es muy f谩cil de usar: simplemente escriba algunos comandos en el CMakeLists.txt
habitual y luego ejecute las pruebas usando ctest
o make test
. A su disposici贸n hay una comprobaci贸n de la salida de programas, an谩lisis din谩mico de memoria y mucho m谩s.
Consideraremos el proceso de probar el programa con un ejemplo espec铆fico. El archivo fuente Multiply.c
contiene el siguiente c贸digo:
#include <stdio.h> #include <stdlib.h> #define ARG_COUNT 3 int main(const int argc, const char *argv[]) { if (argc != ARG_COUNT) { fprintf(stderr, "Error!\n"); return EXIT_FAILURE; } const int first = atoi(argv[1]); const int second = atoi(argv[2]); printf("The result is: %d\n", first * second); return EXIT_SUCCESS; }
Este c贸digo muestra el resultado de multiplicar dos argumentos a la consola. Tenga en cuenta que una situaci贸n de ocurrencia de un error tambi茅n es posible si el n煤mero real de argumentos no satisface lo esperado: en este caso, 隆El error se enviar谩 a la secuencia de errores Error!
.
En el mismo directorio est谩 el archivo CMakeLists.txt
con una descripci贸n del proceso de compilaci贸n, que contiene el siguiente c贸digo:
cmake_minimum_required(VERSION 3.0) project(MyProgram) add_executable(Multiply Multiply.c) set(MULTIPLY_TIMEOUT 1)
Consideremos todo en orden. Los primeros cuatro comandos deben ser familiares para usted del art铆culo anterior , y el siguiente comando enable_testing
plantea una serie de preguntas. En esencia, este comando solo notifica a CMake de su intenci贸n de probar el programa, generando simult谩neamente algunos archivos de configuraci贸n, cuya existencia no necesita saber.
Los siguientes tres add_test
agregan pruebas al proyecto actual. La forma abreviada de este comando toma el nombre de la prueba como primer argumento, y los argumentos posteriores forman un comando de shell para ejecutar la prueba.
Una serie de comandos set_tests_properties
establece el comportamiento de las pruebas individuales. Despu茅s de la lista de elementos de prueba, sigue la palabra clave PROPERTIES
, que indica el comienzo de la lista de propiedades, que tiene la forma < > < >
y se establece para las pruebas seleccionadas. Una lista completa de propiedades disponibles est谩 aqu铆 .
Para todas las pruebas, el tiempo de ejecuci贸n m谩ximo se establece en un segundo con la propiedad TIMEOUT
, y luego para las pruebas posteriores, la salida esperada se establece con las FAIL_REGULAR_EXPRESSION
PASS_REGULAR_EXPRESSION
y FAIL_REGULAR_EXPRESSION
(por ejemplo, si la expresi贸n regular The result is: 3105
coincide, luego la prueba FirstTest
contin煤a, y si coincide con la expresi贸n Error!
prueba se detiene y se considera fallida).
Formas de habilitar las pruebas
Existe un an谩logo del enable_testing
: esta es la inclusi贸n del m贸dulo CTest
trav茅s del comando include
. En general, la inclusi贸n de un m贸dulo es m谩s universal, pero todav铆a hay una diferencia entre ellos.
El comando enable_testing
permite realizar pruebas para el directorio actual, as铆 como para todos los posteriores. Debe ubicarse en la ra铆z CMakeLists.txt
, ya que CTest espera un archivo de prueba en la ra铆z del ensamblado.
Habilitar el m贸dulo CTest
configura el proyecto para la prueba usando CTest / CDash, y tambi茅n determina autom谩ticamente la opci贸n BUILD_TESTING
, que acepta verdadero cuando la prueba es posible (el valor predeterminado es ON
). Por lo tanto, cuando se utiliza este comando, es razonable describir el proceso de prueba de esta manera:
if(BUILD_TESTING) add_test(FirstTest Test 1) add_test(SecondTest Test 2) add_test(ThirdTest Test 3)
Prueba de ejecuci贸n
Una serie de comandos cmake . && cmake --build . && ctest .
cmake . && cmake --build . && ctest .
se ejecutan las tres pruebas. El ctest -R <RegularExpression>
ejecuta un conjunto de pruebas que satisfacen una expresi贸n regular dada. Por ejemplo, el ctest -R ThirdTest
ejecuta solo la tercera prueba.
Ejemplo de embalaje
Para crear un paquete de archivos fuente, bibliotecas y archivos ejecutables, solo tiene que describir la instalaci贸n de los archivos necesarios con el comando de install
y luego habilitar el m贸dulo CPack
el comando de include
:
En este caso, el comando de install
notifica al generador de paquetes del directorio de instalaci贸n de destino Multiply
. Sin escribir comandos de instalaci贸n, la generaci贸n de paquetes no es posible.
A continuaci贸n se enumeran las caracter铆sticas del paquete estableciendo varias variables. De hecho, hay muchas variables de este tipo que empaquetan correctamente los paquetes. La mayor铆a de ellos son opcionales, pero algunos generadores de paquetes requieren su definici贸n. Una lista de variables comunes a todos los generadores de paquetes est谩 disponible aqu铆 .
La definici贸n de la variable CPACK_GENERATOR
es CPACK_GENERATOR
: es una lista de generadores de paquetes invocados por la utilidad cpack
. En este caso, toma el valor DEB
, por lo tanto, se genera un paquete debian en el directorio ra铆z de la aplicaci贸n de resumen.
Finalmente, el m贸dulo CPack
est谩 CPack
, configurando el futuro paquete del proyecto utilizando las variables previamente definidas y el comando de instalaci贸n para el archivo ejecutable, adem谩s de agregar dos objetivos de ensamblaje: package
y package_source
(ensamblaje binario y ensamblaje de origen, respectivamente).
Ejecuci贸n de embalaje
Una serie de comandos cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
inicia para ejecutar el generador seleccionado para crear un paquete binario y comandos cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
genera un paquete fuente directamente en el directorio ra铆z.
Finalizaci贸n
En este punto, la serie completa de tutoriales CMake ha terminado. Espero que hayas aprendido mucho material 煤til y que hayas mejorado tus habilidades de programaci贸n. Buena suerte