J'ai des fichiers de configuration (xml, ini, ...) dans le répertoire de l'entreprise. config
à côté des fichiers sources. Comment puis-je copier tous les fichiers du répertoire de configuration dans le répertoire de construction (à côté du fichier exécutable) chaque fois que je fais le projet ?
Réponses
Trop de publicités?Vous pouvez utiliser add_custom_command
.
Disons que votre cible s'appelle MyTarget
alors vous pouvez le faire :
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 copie le contenu de "/config" dans le répertoire où se trouvera l'exe/lib cible.
Comme Mark Lakata fait remarquer dans un commentaire ci-dessous, en remplaçant PRE_BUILD
con POST_BUILD
dans le add_custom_command
garantit que la copie n'aura lieu que si la construction réussit.
Explication
-
${CMAKE_COMMAND}
est le chemin vers CMake -
-E
permet à CMake d'exécuter des commandes au lieu de construire -
copy_directory
est un Outil en ligne de commande -
config
est le répertoire (qui fait partie de la racine du projet) dont le contenu sera copié dans la cible de construction. -
$<TARGET_FILE_DIR:MyTarget>
est un expression de générateur décrit dans leadd_custom_command
documentation.
En plus de la première réponse,
Pour copier le répertoire lui-même au lieu de son 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)
CMake supporte 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 ?
Utiliser des liens symboliques
CMake active les liens symboliques via create_symlink
:
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
Il garantit que lorsque vous apportez une modification aux fichiers du répertoire, le dossier de construction sera ensuite mis à jour.