J'ai quelques fichiers de configuration (xml, ini, ...) dans le répertoire config
à côté des fichiers sources. Comment puis-je copier tous les fichiers du répertoire config dans le répertoire de construction (à côté du fichier exécutable) chaque fois que je crée le projet?
Vous pouvez utiliser add_custom_command
.
Supposons que votre cible s'appelle MyTarget
, alors vous pouvez faire ceci:
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config/ $<TARGET_FILE_DIR:MyTarget>)
Cela s’exécute à chaque fois que vous construisez MyTarget
et que le contenu de "/ config" est copié dans le répertoire où le fichier exe/lib cible se retrouvera.
Comme Mark Lakata indique un commentaire ci-dessous, en remplacement de PRE_BUILD
avec POST_BUILD
dans le add_custom_command
_ s'assure que la copie ne se produira que si la construction réussit.
${CMAKE_COMMAND}
est le chemin à parcourir-E
fait que CMake exécute des commandes au lieu de les construirecopy_directory
est un outil de ligne de commande config
est le répertoire (situé à la racine du projet) dont le contenu sera copié dans la cible de construction.$<TARGET_FILE_DIR:MyTarget>
est une expression génératrice , décrite dans le add_custom_command
Documentation.CMake prend en charge une copie de fichier de type shell. Ce lien devrait vous être utile - Comment copier un répertoire de l’arbre source vers l’arbre binaire?
En plus de la réponse en haut,
Pour copier le répertoire lui-même à la place du contenu, vous pouvez ajouter /${FOLDER_NAME}
à la fin du deuxième paramètre.
Comme ça:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)