Что я сделал в одном из своих проектов, напишите небольшой скрипт, который даст мне файлы .so или .dll из переменных cmake-переменных VTK и переменных QT_LIBRARIES.
После этого я добавляю эти файлы .dll или .so к моим объектам установки (пример сценариев ниже), и цель установки скопирует файлы .dll или .so из VTK_DIR или QTDIR в $ {CMAKE_INSTALL_PREFIX} \ bin , Это совместимо с CPack, поэтому вы можете написать небольшой скрипт cpack.
Заметим, однако, что вам нужно немного больше на окнах, чтобы получить конечного пользователя автономный пакет: Вам также потребуется «система-библиотеки» (msvcrt.dll, msvcrp.dll или mingwm10. dll, libstdC++. dll). Например. взгляните на this question.
В окнах следующие скрипты обнаруживают все Vtk dlls от VTK_DIR.
file(GLOB VTK_DLLS ${VTK_RUNTIME_LIBRARY_DIRS}/*.dll)
if(VTK_DLLS)
foreach(Vtk_library ${VTK_DLLS})
# Add it to the list of 'desired' vtk-libraries for later installation
list(APPEND Vtk_Install_Libraries ${Vtk_library})
endforeach(Vtk_library ${VTK_DLLS})
list(REMOVE_DUPLICATES Vtk_Install_Libraries)
install(FILES ${Vtk_Install_Libraries} DESTINATION bin COMPONENT ThirdParty )
endif(VTK_DLLS)
И для Qt сценарий немного длиннее, потому что мне нужно было найти библиотеки для отладки и выпуска. Верхняя сторона: он ищет только те компоненты, которые я запросил, с find_package(Qt4 ...)
# If Qt-4 was used, add the 'found' Qt-libraries to the Install-target.
if (USE_QT)
foreach(Qt_library ${QT_LIBRARIES})
# With QT_USE_IMPORTED_TARGETS, we should extract the dll info
# from the target properties
get_target_property(Qt_lib_name ${Qt_library} IMPORTED_LOCATION)
get_target_property(Qt_lib_name_debug ${Qt_library} IMPORTED_LOCATION_DEBUG)
get_target_property(Qt_lib_name_release ${Qt_library} IMPORTED_LOCATION_RELEASE)
# Initially assume the release dlls should be installed, but
# fall back to debug if necessary
if (Qt_lib_name_release AND EXISTS ${Qt_lib_name_release})
set(Qt_library_location ${Qt_lib_name_release})
elseif (Qt_lib_name_debug AND EXISTS ${Qt_lib_name_debug} AND ENVIRONMENT_DEBUG)
set(Qt_library_location ${Qt_lib_name_debug})
elseif (Qt_lib_name AND EXISTS ${Qt_lib_name})
set(Qt_library_location ${Qt_lib_name})
endif (Qt_lib_name_release AND EXISTS ${Qt_lib_name_release})
# Extract the filename part, without the lib-prefix or the .a or ..lib suffix
get_filename_component(Qt_library_name ${Qt_library_location} NAME_WE)
string(REGEX REPLACE "^lib(.*)" "\\1" Qt_library_name ${Qt_library_name})
set(Qt_shared_library ${QT_BINARY_DIR}/${Qt_library_name}.dll)
if (EXISTS ${Qt_shared_library})
# Add it to the list of 'desired' qt-libraries for later installation
list(APPEND Qt_Install_Libraries ${Qt_shared_library})
else (EXISTS ${Qt_shared_library})
message(WARNING " could not find ${Qt_shared_library}")
endif (EXISTS ${Qt_shared_library})
endforeach(Qt_library ${QT_LIBRARIES})
# When building against a static Qt, the list of Qt_Install_Libraries can be empty
if (Qt_Install_Libraries)
list(REMOVE_DUPLICATES Qt_Install_Libraries)
install(FILES ${Qt_Install_Libraries} DESTINATION bin COMPONENT ThirdParty)
endif (Qt_Install_Libraries)
endif (USE_QT)
Что вы пытались и что не работали? Сначала попробуйте скомпилировать все это в Windows. Если он работает, перейдите в упаковку - посмотрите 'cpack' и' cpack-nsis'. – Anonymous