您可以手動更改所有路徑,但這樣做容易出錯,冗長而痛苦 . 我建議使用一個工具為你做:cpack包含cpack .
無論如何,你應該使用:@loader_path . 見Dylib .
對于MacOS X,以下代碼建立一個包并使用root權限正确複制homebrew dylib . 但是,您必須檢查使用自制軟體編譯的每個lib都具有正确的參數 .
通常,對于部署,最好手動編譯庫 . 我在使用自制庫(ffmpeg)時遇到了一些問題 . 但不是Qt也不是Boost :-) .
if( USE_QT5 )
qt5_use_modules( MyApp Core OpenGL Sql Multimedia Concurrent )
endif()
# Install stuff
set( plugin_dest_dir bin )
set( qtconf_dest_dir bin )
set( APPS "\${CMAKE_INSTALL_PREFIX}/bin/MyApp" )
if( APPLE )
set( plugin_dest_dir MyApp.app/Contents/ )
set( qtconf_dest_dir MyApp.app/Contents/Resources )
set( APPS "\${CMAKE_INSTALL_PREFIX}/MyApp.app" )
endif( APPLE )
if( WIN32 )
set( APPS "\${CMAKE_INSTALL_PREFIX}/bin/MyApp.exe" )
endif( WIN32 )
#--------------------------------------------------------------------------------
# Install the MyApp application, on Apple, the bundle is at the root of the
# install tree, and on other platforms it'll go into the bin directory.
install( TARGETS MyApp
BUNDLE DESTINATION . COMPONENT Runtime
RUNTIME DESTINATION bin COMPONENT Runtime
)
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
# One can cull what gets copied by using 'REGEX "..." EXCLUDE'
install( DIRECTORY "${QT_PLUGINS_DIR}/imageformats"
"${QT_PLUGINS_DIR}/codecs"
"${QT_PLUGINS_DIR}/phonon_backend"
"${QT_PLUGINS_DIR}/sqldrivers"
"${QT_PLUGINS_DIR}/accessible"
"${QT_PLUGINS_DIR}/bearer"
"${QT_PLUGINS_DIR}/graphicssystems"
DESTINATION ${plugin_dest_dir}/PlugIns
COMPONENT Runtime
FILES_MATCHING
PATTERN "*.dylib"
PATTERN "*_debug.dylib" EXCLUDE
)
#--------------------------------------------------------------------------------
# install a qt.conf file
# this inserts some cmake code into the install script to write the file
install( CODE "
file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"\")
" COMPONENT Runtime
)
#--------------------------------------------------------------------------------
# Use BundleUtilities to get all other dependencies for the application to work.
# It takes a bundle or executable along with possible plugins and inspects it
# for dependencies. If they are not system dependencies, they are copied.
# directories to look for dependencies
set( DIRS ${QT_LIBRARY_DIRS} ${MYAPP_LIBRARIES} )
# Now the work of copying dependencies into the bundle/package
# The quotes are escaped and variables to use at install time have their $ escaped
# An alternative is the do a configure_file() on a script and use install(SCRIPT ...).
# Note that the image plugins depend on QtSvg and QtXml, and it got those copied
# over.
install( CODE "
file(GLOB_RECURSE QTPLUGINS
\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
set(BU_CHMOD_BUNDLE_ITEMS ON)
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\")
" COMPONENT Runtime
)
# To Create a package, one can run "cpack -G DragNDrop CPackConfig.cmake" on Mac OS X
# where CPackConfig.cmake is created by including CPack
# And then there's ways to customize this as well
set( CPACK_BINARY_DRAGNDROP ON )
include( CPack )