cmake: выяснение, какие библиотеки являются двоичной целью, связанной с - PullRequest
0 голосов
/ 21 сентября 2010

Я хочу реализовать в CMake функциональность, которая позволила бы установить один двоичный файл / цель с помощью команды make install-TARGET.Это довольно просто сделать с пользовательской целью.Однако, когда целевой двоичный файл динамически связан с другими библиотеками проекта (BUILD_SHARED_LIBS=ON), мне также необходимо установить восприимчивые библиотеки.Есть ли способ как-то запросить список библиотек?

Я просмотрел свойства цели, но не нашел ничего подходящего.

Советы о том, как получить список библиотек и / или другие способы реализации вышеописанной функциональности, будут очень благодарны!

[Изменить]

Пример:
Предположим, что у проекта MyProj есть цель CMake "myprog", которая генерируетдвоичный файл myprog.Я хочу установить только этот двоичный файл с make install-myprog.Однако myprog ссылается на libmy1.so, а последний - на libmy2.so, оба являются частью MyProj.Мне нужен механизм, чтобы понять, что мне нужно установить libmy1.so и libmy2.so вдоль myprog.

Ответы [ 2 ]

0 голосов
/ 14 октября 2010

Наиболее элегантное решение выглядит следующим образом. Необходимо использовать параметр CMake COMPONENT команды install , чтобы назначить каждому объекту установки компонент. Например, в вопросе это будет примерно так:

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

и аналогично для общих библиотек

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

Теперь, чтобы вызвать установку myprog, а также mylib1 и mylib2, необходимо создать собственную цель, которая использует местоположение cmake_install.cmake в дереве сборки:

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 голосов
/ 21 сентября 2010

Я не занимаюсь * nix разработкой, но функциональность, которую вы ищете, такая же, как у "Dependency Walker" для Windows. Быстрый поиск выявил следующее:

Разрешение зависимостей в Linux

Надеюсь, это поможет.

...