
Présentation
Cet article décrit les programmes de test et de mise en package utilisant CMake, un ensemble d'utilitaires flexible et polyvalent pour développer divers produits logiciels. Il est fortement recommandé de lire les première et deuxième parties du manuel pour éviter de mal comprendre la syntaxe et le fonctionnement de CMake.
Lancement de CMake
Voici des exemples d'utilisation du langage CMake que vous devez pratiquer. Essayez le code source en modifiant les commandes existantes et en en ajoutant de nouvelles. Pour exécuter ces exemples, installez CMake à partir du site Web officiel .
Exemple de test
Comme mentionné précédemment, CMake prend en charge le test automatique des programmes. Cette fonctionnalité est très facile à utiliser - il suffit d'écrire quelques commandes dans le CMakeLists.txt
habituel, puis d'exécuter les tests en utilisant ctest
ou make test
. À votre disposition, il y a un contrôle de la sortie des programmes, une analyse dynamique de la mémoire et bien plus encore.
Nous considérerons le processus de test du programme avec un exemple spécifique. Le fichier source Multiply.c
contient le code suivant:
#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; }
Ce code affiche le résultat de la multiplication de deux arguments sur la console. Veuillez noter qu'une situation d'occurrence d'une erreur est également possible si le nombre réel d'arguments ne satisfait pas la valeur attendue: dans ce cas, l'erreur sera sortie dans l' Error!
.
Dans le même répertoire se trouve le fichier CMakeLists.txt
avec une description du processus de construction, contenant le code ci-dessous:
cmake_minimum_required(VERSION 3.0) project(MyProgram) add_executable(Multiply Multiply.c) set(MULTIPLY_TIMEOUT 1)
Considérons tout dans l'ordre. Les quatre premières commandes doivent vous être familières dans l' article précédent , et la prochaine commande enable_testing
soulève un certain nombre de questions. En substance, cette commande ne fait que notifier CMake de votre intention de tester le programme, en générant simultanément certains fichiers de configuration, dont vous n'avez pas besoin de connaître l'existence.
Les trois add_test
suivantes ajoutent des tests au projet en cours. La forme courte de cette commande prend le nom du test comme premier argument, et les arguments suivants forment une commande shell pour exécuter le test.
Une série de commandes set_tests_properties
définit le comportement des tests individuels. Après la liste des éléments de test, le mot-clé PROPERTIES
suit, signalant le début d'une liste de propriétés qui ont la forme < > < >
et sont définies pour les tests sélectionnés. Une liste complète des propriétés disponibles est ici .
Pour tous les tests, le temps d'exécution maximal est défini sur une seconde avec la propriété TIMEOUT
, puis pour les tests suivants, la sortie attendue est définie avec les FAIL_REGULAR_EXPRESSION
PASS_REGULAR_EXPRESSION
et FAIL_REGULAR_EXPRESSION
(par exemple, si l'expression régulière The result is: 3105
correspond, puis le test FirstTest
continue et s'il correspond) avec l'expression Error!
test s'arrête et est considéré comme ayant échoué).
Façons d'activer les tests
Il existe un analogue de la enable_testing
- il s'agit de l'inclusion du module CTest
via la commande include
. En général, l'inclusion d'un module est plus universelle, mais il y a toujours une différence entre eux.
La commande enable_testing
permet de tester le répertoire actuel, ainsi que tous les suivants. Il doit se trouver dans la racine CMakeLists.txt
, car CTest attend un fichier de test à la racine de l'assembly.
L'activation du module CTest
configure le projet pour les tests à l'aide de CTest / CDash et détermine également automatiquement l'option BUILD_TESTING
, qui accepte vrai lorsque le test est possible (la valeur par défaut est ON
). Ainsi, lorsque vous utilisez cette commande, il est raisonnable de décrire le processus de test de cette manière:
if(BUILD_TESTING) add_test(FirstTest Test 1) add_test(SecondTest Test 2) add_test(ThirdTest Test 3)
Exécution des tests
Une série de commandes cmake . && cmake --build . && ctest .
cmake . && cmake --build . && ctest .
les trois tests sont exécutés. La commande ctest -R <RegularExpression>
exécute un ensemble de tests qui satisfont une expression régulière donnée. Par exemple, la ctest -R ThirdTest
exécute uniquement le troisième test.
Exemple d'emballage
Pour créer un package de fichiers source, bibliothèques et fichiers exécutables, il vous suffit de décrire l'installation des fichiers nécessaires à l'aide de la commande install
, puis d'activer le module CPack
la commande include
:
Dans ce cas, la commande install
notifie le générateur de packages du répertoire d'installation cible Multiply
. Sans écriture des commandes d'installation, la génération de packages n'est pas possible.
Ce qui suit répertorie les caractéristiques du package en définissant plusieurs variables. En fait, il existe de nombreuses variables de ce type qui conditionnent correctement les packages. La plupart d'entre eux sont facultatifs, mais certains générateurs de packages nécessitent leur définition. Une liste des variables communes à tous les générateurs de packages est disponible ici .
La définition de la variable CPACK_GENERATOR
est CPACK_GENERATOR
- il s'agit d'une liste de générateurs de packages appelés par l'utilitaire cpack
. Dans ce cas, il prend la valeur DEB
, donc un paquet Debian est généré dans le répertoire racine de l'application de vue d'ensemble.
Enfin, le module CPack
est CPack
, configurant le futur package de projet à l'aide des variables définies précédemment et de la commande d'installation pour le fichier exécutable, ainsi que l'ajout de deux cibles d'assembly - package
et package_source
(assemblage binaire et assemblage source, respectivement).
Exécution de l'emballage
Une série de commandes cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
lancé pour exécuter le générateur sélectionné pour créer un package binaire et les commandes cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
générer un package source directement dans le répertoire racine.
Achèvement
À ce stade, la série de didacticiels complets CMake a pris fin. J'espère que vous avez appris beaucoup de matériel utile et amélioré vos compétences en programmation. Bonne chance