cmake_minimum_required(VERSION 3.0) # Définir la politique CMP0048 pour gérer les variables de version dans project() cmake_policy(SET CMP0048 NEW) project(CMAKE C) # Définir le standard C set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) # Ajout de l'option -O3 pour un niveau plus élevé d'optimisation set(CMAKE_C_FLAGS_RELEASE "-O3") # Ajouter les fichiers source de votre projet file(GLOB_RECURSE SOURCES "src/*.c") # Afficher un message au début de la compilation message("Début de la compilation") # Créer une cible pour l'exécutable add_executable(CMAKE ${SOURCES} ) # Options de compilation pour le debug set(CMAKE_C_FLAGS_DEBUG "-g -Wall") # Tâche de compilation add_custom_target(build COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all COMMENT "Compilation en cours..." ) # Tâche de nettoyage add_custom_target(clean_all COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/ COMMENT "Nettoyage en cours..." ) # Ajouter une instruction pour afficher le répertoire de construction message("Répertoire de construction : ${CMAKE_BINARY_DIR}") # Tâche de débogage add_custom_target(debug COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR} COMMENT "Configuration de la compilation en mode debug..." ) # Afficher un message au début du debug message("Début du debug") # Tâche pour exécuter l'exécutable généré add_custom_target(run COMMAND $ COMMENT "Exécution de l'exécutable..." ) # Tâche pour exécuter l'exécutable généré avec valgrind add_custom_target(run_valgrind COMMAND valgrind --leak-check=full $ COMMENT "Exécution de l'exécutable avec valgrind..." ) # Tâche pour exécuter l'exécutable généré avec gdb option(BUILD_DOC "Build documentation" ON) # Indique que la construction de la documentation est une option et l'active par défaut option(BUILD_DOC "Build documentation" ON) # On vérifie que Doxygen est installé find_package(Doxygen) if (DOXYGEN_FOUND) # Défini les fichiers d'entrée et de sortie set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) # Demande de configuration du fichier configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) message("Doxygen build started") # Option ALL qui permet de construire les documents en même temps que l'application add_custom_target(doc_doxygen ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) else (DOXYGEN_FOUND) message("Doxygen need to be installed to generate the doxygen documentation") endif (DOXYGEN_FOUND)