Livre de recettes CMake
Ce référentiel rassemble les sources des recettes contenues dans le CMake Cookbook publié par Packt et rédigé par Radovan Bast et Roberto Di Remigio
Table des matières
Chapitre 1 : D'un simple exécutable aux bibliothèques
- 1. Compilation d'un seul fichier source en un exécutable
- 2. Changement de générateur
- 3. Création et liaison de bibliothèques statiques et partagées
- 4. Contrôler la compilation avec des conditions
- 5. Présentation des options à l'utilisateur
- 6. Spécification du compilateur
- 7. Changer le type de build
- 8. Contrôler les indicateurs du compilateur
- 9. Établir la norme pour la langue
- 10. Utilisation des constructions de flux de contrôle
Chapitre 2 : Détection de l'environnement
- 1. Découverte du système d'exploitation
- 2. Gérer le code source dépendant de la plate-forme
- 3. Gérer le code source dépendant du compilateur
- 4. Découverte de l'architecture du processeur hôte
- 5. Découverte du jeu d'instructions du processeur hôte
- 6. Activation de la vectorisation pour la bibliothèque Eigen
Chapitre 3 : Détection des bibliothèques et des programmes externes
- 1. Détection de l'interpréteur Python
- 2. Détection de la bibliothèque Python
- 3. Détection des modules et packages Python
- 4. Détection des bibliothèques mathématiques BLAS et LAPACK
- 5. Détection de l'environnement parallèle OpenMP
- 6. Détection de l'environnement parallèle MPI
- 7. Détection de la bibliothèque Eigen
- 8. Détection des bibliothèques Boost
- 9. Détection des bibliothèques externes : I. Utilisation de
pkg-config
- 10. Détection des bibliothèques externes : II. Écrire un module de recherche
Chapitre 4 : Création et exécution de tests
- 1. Création d'un test unitaire simple
- 2. Définir un test unitaire à l'aide de la bibliothèque Catch2
- 3. Définir un test unitaire et établir un lien avec Google Test
- 4. Définition d'un test unitaire et liaison avec le test Boost
- 5. Utiliser l'analyse dynamique pour détecter les défauts de mémoire
- 6. Tester les échecs attendus
- 7. Utiliser des délais d'attente pour les tests longs
- 8. Exécuter des tests en parallèle
- 9. Exécution d'un sous-ensemble de tests
- 10. Utilisation des montages de test
Chapitre 5 : Opérations au moment de la configuration et au moment de la construction
- 1. Utilisation d'opérations sur les fichiers indépendantes de la plate-forme
- 2. Exécution d'une commande personnalisée au moment de la configuration
- 3. Exécution d'une commande personnalisée au moment de la construction : I. Utilisation
add_custom_command
- 4. Exécution d'une commande personnalisée au moment de la construction : II. Utilisation de
add_custom_target
- 5. Exécution de commandes personnalisées pour des cibles spécifiques au moment de la construction
- 6. Compilation et liaison de sondage
- 7. Sonder les indicateurs du compilateur
- 8. Exécution du sondage
- 9. Affiner la configuration et la compilation avec des expressions génératrices
Chapitre 6 : Génération du code source
- 1. Générer des sources au moment de la configuration
- 2. Génération du code source au moment de la configuration à l'aide de Python
- 3. Générer du code source au moment de la construction à l'aide de Python
- 4. Enregistrement des informations sur la version du projet pour la reproductibilité
- 5. Enregistrement de la version du projet à partir d'un fichier
- 6. Enregistrement du hachage Git au moment de la configuration
- 7. Enregistrement du hachage Git au moment de la construction
Chapitre 7 : Projets structurants
- 1. Réutilisation du code avec des fonctions et des macros
- 2. Diviser les sources CMake en modules
- 3. Écriture d'une fonction pour tester et définir les indicateurs du compilateur
- 4. Définir une fonction ou une macro avec des arguments nommés
- 5. Redéfinir les fonctions et les macros
- 6. Dépréciation des fonctions, macros et variables
- 7. Limiter la portée avec
add_subdirectory
- 8. Éviter les variables globales à l'aide de
target_sources
- 9. Organisation de projets Fortran
Chapitre 8 : Le modèle Superbuild
- 1. Utilisation du modèle superbuild
- 2. Gérer les dépendances avec un superbuild : I. Les librairies Boost
- 3. Gestion des dépendances avec un superbuild : II. La bibliothèque FFTW
- 4. Gestion des dépendances avec un superbuild : III. Le cadre de test Google
- 5. Gérer votre projet comme un superbuild
Chapitre 9 : Projets multilingues
- 1. Création de projets Fortran utilisant des bibliothèques C/C++
- 2. Création de projets C/C++ utilisant les bibliothèques Fortran
- 3. Création de projets C++ et Python à l'aide de Cython
- 4. Création de projets C++ et Python à l'aide de Boost.Python
- 5. Création de projets C++ et Python à l'aide de pybind11
- 6. Mélanger C, C++, Fortran et Python à l'aide de Python CFFI
Chapitre 10 : Écriture d'un programme d'installation
- 1. Installer votre projet
- 2. Générer des en-têtes d'exportation
- 3. Exporter vos cibles
- 4. Installer un superbuild
Chapitre 11 : Projets d'emballage
- 1. Génération de packages sources et binaires
- 2. Distribuer un projet C++/Python construit avec CMake/pybind11 via PyPI
- 3. Distribuer un projet C/Fortran/Python construit avec CMake/CFFI via PyPI
- 4. Distribuer un projet simple sous forme de package Conda
- 5. Distribuer un projet avec des dépendances en tant que package Conda
Chapitre 12 : Construire la documentation
- 1. Création de documentation à l'aide de Doxygen
- 2. Création de documentation à l'aide de Sphinx
- 3. Combiner Doxygen et Sphinx
Chapitre 13 : Générateurs alternatifs et compilation croisée
- 1. Compilation croisée d'un exemple de Hello World
- 2. Compilation croisée d'un binaire Windows avec parallélisation OpenMP
Chapitre 14 : Test des tableaux de bord
- 1. Déploiement des tests sur le tableau de bord CDash
- 2. Signalement de la couverture des tests au tableau de bord CDash
- 3. Utilisation d'AddressSanitizer et signalement des défauts de mémoire à CDash
- 4. Utilisation de ThreadSanitizer et reporting des courses de données sur CDash
Chapitre 15 : Portage d'un projet vers CMake