web-dev-qa-db-fra.com

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

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?

64
Meysam

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.

Explication

  • ${CMAKE_COMMAND} est le chemin à parcourir
  • -E fait que CMake exécute des commandes au lieu de les construire
  • copy_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.
111
Fraser

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?

5
rajneesh

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)
1
hyrchao