Forum Programmation.autre CMake : multiples commandes install

Posté par  .
Étiquettes : aucune
0
19
juil.
2008
Bonjour,

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  . Évalué à 2.

    Bonjour,

    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  . Évalué à 2.

      En fait non, je viens de re-vérifier, c'est une syntaxe correcte.
      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  . Évalué à 2.

        Ça ne marche pas :'(
        • [^] # Re: Erreur dans la ligne "install" ?

          Posté par  . Évalué à 2.

          T'as bien mis dans le fichier ki-va-bien:
          add_executable(mon_binaire_easy.sh IMPORTED)
          • [^] # Re: Erreur dans la ligne "install" ?

            Posté par  . Évalué à 2.

            Merci, déjà ça avance, pour l'IMPORTED il a fallu que je passe à la version 2.6 de CMake (2.4 dans le testing de debian). Mais je suis toujours bloqué.

            Soit dans scripts j'ai ceci :add_executable (mcmc-pds_easy.sh IMPORTED)
            set_property(TARGET mcmc-pds_easy.sh PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/scripts)
            install (TARGETS mcmc-pds_easy.sh DESTINATION bin)
            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) :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)
            install (TARGETS scripts/mcmc-pds_easy.sh RUNTIME DESTINATION bin)
            qui donne :CMake Error at CMakeLists.txt:14 (install):
            install TARGETS given target "scripts/mcmc-pds_easy.sh" which does not
            exist in this directory.
            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.
            • [^] # Re: Erreur dans la ligne "install" ?

              Posté par  . Évalué à 2.

              Dans le premier cas, je ne comprend pas bien pourquoi tu spécifie un property/IMPORTED_LOCATION, il devrait le trouver tout seul vu qu'il est dans le répertoire courant (scripts), non?
              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  . Évalué à 3.

                J'ai trouvé !

                Dans le CMakeLists.txt de la racine du projet.
                Je mets :add_subdirectory (src)
                INSTALL(FILES blabla DESTINATION /usr/local/bin)
                ça fonctionne, par contre add_subdirectory (src .)
                INSTALL(FILES blabla DESTINATION /usr/local/bin)
                ne fonctionne plus. C'est le "." dans add_subdirectory qui interdit une directive install par la suite.

                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.