Запуск fixup_bundle для конкретной цели (ПАКЕТ)

Я хотел бы включить внешние DLL при запуске CPACK без перечисления их всех (явным вызовом INSTALL(FILE...))

Используя fixup_bundle, можно исправить все исполняемые файлы в папке установки (CMAKE_INSTALL_PREFIX), скопировав необходимые библиотеки.

INSTALL(CODE "
   include(BundleUtilities)
   fixup_bundle(\"${APPS}\"   \"\"   \"${DIRS}\")
   " DESTINATION bin COMPONENT Runtime)

Этот код выполняется при создании цели INSTALL и будет обрабатывать только элементы, находящиеся внутри папки CMAKE_INSTALL_PREFIX.

Вместо этого я хотел бы запустить fixup_bundle во время создания цели PACKAGE, которая добавляется CPACK. таким образом, сгенерированный сценарий установки также будет включать внешние библиотеки.

Кому-нибудь удалось это сделать?


person Pierluigi    schedule 13.12.2013    source источник


Ответы (1)


Лучшее решение, которое я нашел до сих пор, не полагается на fixup_bundle, а на перечисление всех файлов, которые должны быть установлены для конфигурации времени выполнения (например, все dll).

Учитывая цель, вы можете восстановить связанный файл времени выполнения и добавить его в проект INSTALL:

#get dll location
get_target_property(BIN_F ${target} LOCATION_${Configuration}) 

#copy to the bin folder
install(FILES ${BIN_F} DESTINATION ${destinationFolder} 
                    CONFIGURATIONS ${Configuration} 
                         COMPONENT Runtime) 

Затем вы можете выполнить рекурсию над целевыми зависимостями, чтобы выполнить те же две операции, используя

get_target_property(link_libs ${target} INTERFACE_LINK_LIBRARIES)
person Pierluigi    schedule 02.02.2017