J'ai un projet qui contient deux dossier, src et scripts. J'utilise CMake comme outil. Dans le CMakeLists.txt du répertoire racine, j'ai :
add_subdirectory (scripts .)
add_subdirectory (src .)
Dans celui de src :... (compilation et le binaire se place dans racine/bin)
install (TARGETS mon_binaire RUNTIME DESTINATION bin)
Dans celui de scripts :install (PROGRAMS mon_binaire_easy.sh DESTINATION bin)
Le but étant bien évidement d'installer et le script et le binaire dans ${PREFIX}/bin mais seulement mon_binaire s'installe, si j'inverse l'ordre des add_subdirectory c'est le script qui s'installe.
J'ai bien tenté de mettre une commande :
install (PROGRAMS bin/mon_binaire scripts/mon_binaire_easy.sh DESTINATION bin)
dans le CMakeLists.txt du répertoire racine, mais ça ne fonctionne pas.Comment faire pour installer à partir de multiples répertoires avec CMake ?
# Erreur dans la ligne "install" ?
Posté par Christophe --- . Évalué à 2.
Je suis pas expert en cmake, mais en regardant un peu la doc, j'ai l'impression que cette syntaxe n'est pas correcte:
install (PROGRAMS mon_binaire_easy.sh ...)
Il faudrait que tu essaie les lignes:
install (TARGETS mon_binaire RUNTIME DESTINATION bin)
install (TARGETS mon_binaire_easy.sh RUNTIME DESTINATION bin)
(en tout cas d'après la doc 2.4/2.6)
[^] # Re: Erreur dans la ligne "install" ?
Posté par Christophe --- . Évalué à 2.
Donc je pense que tu as trouvé un bug...
As-tu essayé, au top, de mettre:
install (PROGRAMS mon_binaire mon_binaire_easy.sh DESTINATION bin)
[^] # Re: Erreur dans la ligne "install" ?
Posté par nicoastro . Évalué à 2.
[^] # Re: Erreur dans la ligne "install" ?
Posté par Christophe --- . Évalué à 2.
add_executable(mon_binaire_easy.sh IMPORTED)
[^] # Re: Erreur dans la ligne "install" ?
Posté par nicoastro . Évalué à 2.
Soit dans scripts j'ai ceci :
add_executable (mcmc-pds_easy.sh IMPORTED)
et j'obtiens (avec ou sans le set_property, en changeant la ligne par ex. en mettant seulement "." au lieu du chemin complet ou encore en rajoutant /mcmc-pds_easy.sh) :set_property(TARGET mcmc-pds_easy.sh PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/scripts)
install (TARGETS mcmc-pds_easy.sh DESTINATION bin)
CMake Error at scripts/CMakeLists.txt:6 (install):
install TARGETS given target "mcmc-pds_easy.sh" which does not exist in
this directory.
J'ai tenté aussi ceci dans le top cette fois et en enlevant seulement le install du CMakeLists.txt qui est dans scripts :
add_subdirectory (scripts)
qui donne :install (TARGETS scripts/mcmc-pds_easy.sh RUNTIME DESTINATION bin)
CMake Error at CMakeLists.txt:14 (install):
En mettant plutot PROGRAMS que TARGETS pas de message d'erreur mais le script ne s'installe pas dans le /usr/local/bin/. J'avoue être un peu paumé, je ne vois pas ce qui cloche.install TARGETS given target "scripts/mcmc-pds_easy.sh" which does not
exist in this directory.
[^] # Re: Erreur dans la ligne "install" ?
Posté par Christophe --- . Évalué à 2.
C'est peut-être à cause de cela qu'il ne le trouve pas, il cherche probablement dans scripts/scripts/ (même si le CMAKE_SOURCE_DIR est censé lever toute ambiguité).
Dans le deuxième cas, je serais curieux de savoir ce qu'un strace sur le cmake donnerais, pour aller voir quel est le chemin physique qu'il cherche (et ne trouve pas).
Pour ce qui est du troisième point, le pb d'origine, je pense de plus en plus que c'est un bug, qu'au lieu d'ajouter à la liste des installs la deuxième directive, il écrase la première.
[^] # Re: Erreur dans la ligne "install" ?
Posté par nicoastro . Évalué à 3.
Dans le CMakeLists.txt de la racine du projet.
Je mets :
add_subdirectory (src)
ça fonctionne, par contreINSTALL(FILES blabla DESTINATION /usr/local/bin)
add_subdirectory (src .)
ne fonctionne plus. C'est le "." dans add_subdirectory qui interdit une directive install par la suite.INSTALL(FILES blabla DESTINATION /usr/local/bin)
Par contre maintenant le binaire mcmc-pds se trouve dans src/bin/ au lieu de bin/ mais je devrais pouvoir m'en sortir avec la doc, au pire c'est pas bien grave... Ce serait réellement un bug alors ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.