2010-09-21 8 views
0

I baguette magique pour mettre en œuvre CMake une fonctionnalité permettant l'installation d'un seul binaire/cible par une commande make install-TARGET. C'est assez simple à faire avec une cible personnalisée. Cependant, lorsque le binaire cible en question est lié dynamiquement à d'autres bibliothèques du projet (BUILD_SHARED_LIBS=ON), j'ai également besoin d'installer les bibliothèques réceptives. Est-il possible d'interroger la liste des bibliothèques?CMake: déterminer quelles bibliothèques est une cible binaire lié contre

Je l'ai regardé les propriétés cibles, mais n'ai pas trouvé quoi que ce soit pertinent.

Conseils sur la façon d'obtenir la liste des libs et/ou d'autres moyens de mettre en œuvre les fonctionnalités décrites ci-dessus seraient très appréciés!

[Modifier]

Exemple:
Supposons que le projet MyProj a une cible CMake "myprog" qui génère le myprog binaire. Je veux installer seulement ce binaire avec make install-myprog. Cependant myprog liens contre libmy1.so et les liens de ce dernier contre libmy2.so, les deux partie de MyProj. Je besoin d'un mécanisme pour comprendre que je dois installer à la fois libmy1.so et libmy2.so le long myprog.

Répondre

0

La solution la plus élégante semble être la suivante. Il faut utiliser le paramètre CMake COMPONENT du install command pour affecter chaque cible d'installation à un composant. Par exemple, dans la question que ce serait quelque chose comme ceci:

install(TARGETS myprog DESTINATION ${BIN_DEST_DIR} COMPONENT myprog), 

et de même pour les bibliothèques partagées

install(TARGETS my1 my2 DESTINATION ${LIB_DEST_DIR} COMPONENT my-libs). 

Maintenant, pour appeler l'installation de myprog ainsi que mylib1 et mylib2 une cible personnalisée a être créé qui utilise le cmake_install.cmake localiser dans l'arbre de construction:

add_custom_target(install-myprog 
    COMMAND ${CMAKE_COMMAND} -DCOMPONENT=my-libs -P ${CMAKE_BINARY_DIR}/cmake_install.cmake 
    COMMAND ${CMAKE_COMMAND} -DCOMPONENT=myprog -P ${CMAKE_BINARY_DIR}/cmake_install.cmake 
    COMMENT "Installing myprog"). 
0

Je ne fais pas le développement * nix, mais la fonctionnalité que vous cherchez est la même que la « dépendance Walker » pour les fenêtres. Une recherche rapide élevé les éléments suivants:

Dependency resolution in Linux

Hope it helps.

+0

Pas vraiment, je pense que vous avez mal J'ai compris la question. Voir la modification ci-dessus. – pszilard

Questions connexes