Un modèle C++ rapide pour les projets CMake modernes, destiné à être un point de départ facile à utiliser.
Il s'agit de mon point de vue personnel sur ce type de modèle. Il se peut donc que je n'utilise pas les meilleures pratiques ou que vous soyez en désaccord avec ma façon de procéder. Tous les commentaires sont grandement appréciés !
Configuration et projet CMake modernes, qui, à ma connaissance, utilisent les meilleures pratiques,
Un exemple de configuration Clang-Format , inspiré du modèle de base de Google , avec des ajustements mineurs. Ceci n'est qu'un point de départ, car le style de codage est une question subjective, chacun est libre de le supprimer (pour la valeur par défaut de LLVM ) ou de proposer sa propre alternative,
Intégration d'analyseurs statiques , avec Clang-Tidy et Cppcheck , le premier étant l'option par défaut,
Prise en charge de Doxygen , via l'option ENABLE_DOXYGEN
, que vous pouvez activer si vous souhaitez l'utiliser,
Prise en charge des tests unitaires , via GoogleTest (avec une option pour activer GoogleMock ) ou Catch2 ,
Couverture de code , activée à l'aide de l'option ENABLE_CODE_COVERAGE
, via l'intégration Codecov CI,
Prise en charge du gestionnaire de packages , avec Conan et Vcpkg , via leurs options respectives
Workflows CI pour Windows, Linux et MacOS utilisant GitHub Actions , utilisant les fonctionnalités de mise en cache, pour garantir une durée d'exécution minimale,
Modèles .md pour : README , lignes directrices de contribution , problèmes et demandes d'extraction ,
Licence permissive pour vous permettre de l'intégrer le plus facilement possible. Le modèle est sous licence Unlicense,
Options pour créer une bibliothèque d'en-tête uniquement ou un exécutable, pas seulement une bibliothèque statique ou partagée.
Intégration Ccache , pour accélérer les temps de reconstruction
Ces instructions vous permettront d'obtenir une copie du projet opérationnel sur votre ordinateur local à des fins de développement et de test.
Ce projet est censé n'être qu'un modèle, les versions du logiciel utilisé peuvent donc être modifiées pour mieux répondre aux besoins du ou des développeurs. Si vous souhaitez utiliser le modèle tel quel, c'est -à-dire utiliser les versions recommandées ici, vous aurez alors besoin de :
CMake v3.15+ - trouvé sur https://cmake.org/
Compilateur C++ - doit prendre en charge au moins la norme C++17 , c'est-à-dire MSVC , GCC , Clang
Remarque : Vous devez également être en mesure de fournir à CMake un générateur pris en charge.
Il est assez simple d'installer le projet, il vous suffit de le cloner depuis GitHub ou de générer un nouveau référentiel à partir de celui-ci (également sur GitHub ).
Si vous souhaitez cloner le dépôt, plutôt que de générer à partir de celui-ci, il vous suffit d'exécuter :
git clone https://github.com/filipdutescu/modern-cpp-template/
Après avoir fini d'obtenir une copie du projet, avec l'une des méthodes ci-dessus, créez un nouveau dossier dans le dossier include/
, avec le nom de votre projet. Modifiez cmake/SourcesAndHeaders.cmake
pour ajouter vos fichiers.
Vous devrez également renommer le fichier cmake/ProjectConfig.cmake.in
pour commencer avec le nom exact de votre projet . Tel que cmake/MyNewProjectConfig.cmake.in
. Vous devez également apporter les mêmes modifications dans les workflows GitHub fournis, notamment .github/workflows/ubuntu.yml
, dans lesquels vous devez remplacer l'option CMake -DProject_ENABLE_CODE_COVERAGE=1
par -DMyNewProject_ENABLE_CODE_COVERAGE=1
.
Enfin, changez "Project"
de CMakeLists.txt
, de
project (
"Project"
VERSION 0.1.0
LANGUAGES CXX
)
au nom exact de votre projet , c'est à dire en reprenant le nom précédent cela deviendra :
project (
MyNewProject
VERSION 0.1.0
LANGUAGES CXX
)
Pour installer un projet déjà construit, vous devez exécuter la cible install
avec CMake. Par exemple:
cmake --build build --target install --config Release
# a more general syntax for that command is:
cmake --build < build_directory > --target install --config < desired_config >
Pour construire le projet, tout ce que vous avez à faire, après avoir correctement installé le projet , est d'exécuter une routine CMake similaire à celle ci-dessous :
mkdir build/ && cd build/
cmake .. -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target install
Remarque : Le
CMAKE_INSTALL_PREFIX
personnalisé peut être omis si vous souhaitez installer dans l'emplacement d'installation par défaut.
D'autres options que vous pouvez définir pour le projet peuvent être trouvées dans le fichier cmake/StandardSettings.cmake
. Pour certaines options, une configuration supplémentaire peut être nécessaire dans leurs fichiers *.cmake
respectifs (c'est-à-dire que Conan a besoin de CONAN_REQUIRES
et peut avoir besoin de CONAN_OPTIONS
pour qu'il fonctionne correctement ; les deux sont définis dans le fichier cmake/Conan.cmake
).
Afin de générer la documentation pour le projet, vous devez configurer la build pour utiliser Doxygen. Cela se fait facilement en modifiant le flux de travail présenté ci-dessus comme suit :
mkdir build/ && cd build/
cmake .. -D < project_name > _ENABLE_DOXYGEN=1 -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target doxygen-docs
Remarque : Cela générera un répertoire
docs/
dans le répertoire racine du projet .
Par défaut, le modèle utilise Google Test pour les tests unitaires. Les tests unitaires peuvent être désactivés dans les options, en définissant ENABLE_UNIT_TESTING
(de cmake/StandardSettings.cmake) sur false. Pour exécuter les tests, utilisez simplement CTest, à partir du répertoire de construction, en transmettant la configuration souhaitée pour laquelle exécuter les tests. Un exemple de cette procédure est :
cd build # if not in the build directory already
ctest -C Release # or `ctest -C Debug` or any other configuration you wish to test
# you can also run tests with the `-VV` flag for a more verbose output (i.e.
# GoogleTest output as well)
Le cas échéant, doit être présenté ici.
Le cas échéant, doit être présenté ici.
Veuillez lire CONTRIBUTING.md pour plus de détails sur la façon dont vous pouvez devenir contributeur et le processus pour nous soumettre des demandes de tirage.
Ce projet utilise SemVer pour le versioning. Une liste des versions existantes peut être trouvée dans les versions du projet.
Ce projet est sous licence Unlicense - voir le fichier LICENSE pour plus de détails