Couverture de code C++ avec CMake et GCOVR
Bensuperpc août 07, 2025 [Software] #Features #Code coverage #Testing #GCOVRCouverture de code en C/C++, avec CMake et GCOVR
Introduction
Ce tutoriel montre comment configurer un projet C/C++ avec CMake et GCOVR afin de générer des rapports de couverture de code, cela permet de vérifier précisément quelles parties du code source et quelles branches conditionnelles (if, switch...) sont effectivement couvertes par les tests.
Nous utiliserons un petit projet d'exemple basé sur Google Test, mais la méthode est également compatible avec d'autres frameworks comme Catch2, Boost.Test ou Doctest.
Exigences minimales
- CMake 3.15
- GCC ou Clang (C++17)
- Google Test (GTest)
- GCOVR 5.0
- Ninja (optionnel, mais recommandé)
Une distribution comme Ubuntu 22.04, un Debian 12 ou supérieur est recommandé dans le cadre de ce tutoriel, mais vous pouvez utiliser n'importe quelle distribution Linux avec les versions requises des outils.
Installation des dépendances
Pour installer les dépendances nécessaires, vous pouvez utiliser les commandes suivantes :
Pour Ubuntu/Debian :
Pour Fedora :
Pour Arch Linux :
Qu'est-ce que GCOVR ?
GCOVR est un outil open source qui permet de générer des rapports de couverture de code C/C++ à partir des données générées lors de l'exécution des tests.
Projet d'exemple
Le projet d'exemple est une simple application et deux bibliothèques C++, une pour les mathématiques et une pour la physique.
Voici l’arborescence du projet :
Vous pouvez télécharger le projet d'exemple: tuto_coverage.7z
Compilation avec couverture
Pour que la couverture de code fonctionne, le projet doit être compilé avec les options : -O0 -g --coverage
et --coverage
pour le linkage.
&&
L'option --coverage
est équivalente à -fprofile-arcs -ftest-coverage
pour GCC/Clang, dans un projet classique, il est préférable d'utiliser des presets CMake plutôt que de spécifier les options manuellement.
Exécution des tests
Une fois le projet compilé, vous pouvez exécuter les tests, cela générera des fichiers sur lesquels GCOVR s’appuie pour générer les rapports de couverture:
.gcno
généré à la compilation, contient les métadonnées pour la couverture.gcda
généré à l'exécution, contient les données de couverture collectées
Option | Description |
---|---|
--test-dir build | Spécifie le Répertoire contenant les tests |
--output-on-failure | Affiche la sortie des tests échoués |
--no-tests=error | Génère une erreur si aucun test n'est trouvé |
--repeat until-fail:1 | Répète les tests jusqu'à ce qu'un échec se produise, ici 1 fois |
--schedule-random | Fait exécuter les tests dans un ordre aléatoire |
--parallel 1 | Exécute les tests en parallèle, ici 1 test à la fois |
Vous obtiendrez une sortie similaire à :
=
)
Rapport HTML avec GCOVR
Après l'exécution des tests, vous pouvez générer un rapport de couverture avec GCOVR, ici nous générons un rapport HTML pour visualiser la couverture de code, mais vous pouvez également générer des rapports en texte brut, XML ou JSON.
Option | Description |
---|---|
--root "." | Définit le répertoire racine pour la couverture |
--decisions | Inclut les décisions de couverture dans le rapport |
--calls | Inclut les appels de fonction dans le rapport |
--html-theme "green" | Définit le thème du rapport HTML en vert |
--exclude "tests/*" | Exclut les fichiers de test du rapport |
--exclude "build/*" | Exclut les fichiers de build du rapport |
--exclude "main.cpp" | Exclut le fichier main.cpp du rapport |
--html | Génère un rapport HTML |
--html-details | Inclut les détails dans le rapport HTML |
--output "build/coverage.html" | Spécifie le nom du fichier de sortie pour le rapport HTML |
Une fois le rapport HTML généré, vous pouvez l'ouvrir dans votre navigateur pour visualiser la couverture de code, il devrait être généré dans le fichier build/coverage.html
.
Voici le rendu du rapport sur le navigateur :


Rapport en XML ou JSON
Vous pouvez également générer un rapport en XML ou JSON pour une intégration avec d'autres outils :
Ou en JSON :