2009-10-20 3 views
8

J'essaye d'automatiser mon processus de construction avec cmake. Il n'y a actuellement qu'un seul numéro:cmake: Comment faire un script pour copier des fichiers de données accompagnant mon programme

Où est, dans la philosophie de cmake (s'il y en a un), le meilleur endroit pour mettre la copie de fichiers de données.

J'ai une bibliothèque et quelques exemples. Les exemples ont besoin des données.

Je fais actuellement les suivantes:

J'utilise une commande personnalisée dans CMakeLists.txt de chaque exemple pour copier toutes les données dans le CMAKE_CURRENT_BINARY_DIR dans une étape de post-construction. Je l'utilise dans mon flux de travail de débogage, donc aucune cible d'installation n'est encore exécutée.

Cela fonctionne très bien, mais présente certains inconvénients:

  1. La copie se produit chaque fois que le projet est construit. Avec VS 2005, cela arrive parfois même s'il n'est pas nouvellement construit. Puisque les dossiers de données sont grands, la copie prend du temps, et cela devient un peu ennuyeux.
  2. Je suis certain que c'est une façon très maladroite de le faire.

Je veux copier les répertoires des chemins exécutables, donc je ne ai pas besoin des conseils comment définir le répertoire de travail de débogage

Le moment idéal pour copier ces répertoires serait à la configuration cmake/temps de génération , au moins je le pense. Devrais-je le faire, et comment ferais-je cela?

Répondre

12

Comme l'a récemment vu dans this question, vous pouvez utiliser configure_file pour copier des fichiers dans le répertoire de construction:

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/input.txt 
    ${CMAKE_CURRENT_BINARY_DIR}/output.txt COPYONLY) 

qui le fait une fois au moment de la construction et seulement en cas de besoin.

+2

Merci! Je suis surpris qu'il y ait si peu de réponses à cette question. CMake est largement utilisé maintenant, mais encore mal documenté. Très peu de gens semblent vraiment groke cmake. – AndreasT

+2

'cmake --help-full' FTW! :-) – richq

Questions connexes