96 votes

Comment copier le contenu d'un répertoire dans le répertoire de construction après make avec CMake ?

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 ?

165voto

Fraser Points 20579

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 le add_custom_command documentation.

21voto

hyrchao Points 211

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)

5voto

rajneesh Points 971

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 ?

3voto

Urax Points 56

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.

-5voto

Luigi Menale Points 1

Dans mon projet, j'utilise INSTALL pour spécifier à CMake, ce que je dois déplacer et où je dois déplacer mon binaire avec le fichier de conf. Après l'exécution de cmake, utilisez "make install".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X