c'est mon fichier CMakeLists.txt actuel
cmake_minimum_required(VERSION 3.3)
set(CMAKE_C_FLAGS " -Wall -g ")
project( bmi )
file( GLOB SRCS *.cpp *.h )
add_executable( bmi ${SRCS})
Cela se construit à partir de mon répertoire source, mais je dois nettoyer tous les fichiers supplémentaires après. Ma question est la suivante: comment puis-je générer cela à partir d'un répertoire de construction si tous mes fichiers source se trouvent dans le même répertoire source?
merci
Si vous avez vraiment besoin d'utiliser un fichier (GLOB…), ce CMakeLists.txt devrait fonctionner:
cmake_minimum_required(VERSION 3.3)
project(bmi)
add_definitions("-Wall" "-g")
include_directories(${PROJECT_SOURCE_DIR})
file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/*.cpp)
add_executable(bmi ${SRC_FILES})
Dans ce cas, vous devez lancer cmake à partir de votre répertoire de construction chaque fois que vous ajoutez ou supprimez un fichier source:
cmake <your_source_dir> -G <your_build_generator>
Comme Phil le rappelle, la documentation de CMake ne recommande pas cette utilisation de GLOB. Mais il y a des exceptions. Vous obtiendrez plus d'informations sur ce post .
Si vous ne rencontrez pas ces exceptions, vous préféreriez répertorier vos fichiers source plutôt que d'utiliser GLOB:
set(SRC_FILES ${PROJECT_SOURCE_DIR}/main.cpp
${PROJECT_SOURCE_DIR}/bmi.cpp
… )
NB: si vous avez #include de vos fichiers .h dans des fichiers .cpp, je ne vois aucune raison de les mettre dans add_executable, il vous suffit de spécifier le répertoire include avec include_directories.
Ce n'est pas une réponse à votre question, mais je ne pouvais pas formater ceci correctement dans un commentaire. Dans la documentation cmake :
Remarque: nous vous déconseillons d'utiliser GLOB pour collecter une liste de fichiers source à partir de votre arborescence. Si aucun fichier CMakeLists.txt ne change lors de l'ajout ou de la suppression d'une source, le système de génération généré ne sait pas quand demander à CMake de se régénérer.