Cmake 为特定目标(包)运行fixup\u捆绑包
我希望在运行CPACK时合并外部DLL,而不枚举所有DLL(通过显式调用INSTALL(FILE…) 使用fixup\u bundle可以通过复制所需的库来修复安装文件夹(CMAKE\u install\u PREFIX)中的所有可执行文件Cmake 为特定目标(包)运行fixup\u捆绑包,cmake,cpack,Cmake,Cpack,我希望在运行CPACK时合并外部DLL,而不枚举所有DLL(通过显式调用INSTALL(FILE…) 使用fixup\u bundle可以通过复制所需的库来修复安装文件夹(CMAKE\u install\u PREFIX)中的所有可执行文件 INSTALL(CODE " include(BundleUtilities) fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\") " DESTINATION bin COMPONENT Runti
INSTALL(CODE "
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
" DESTINATION bin COMPONENT Runtime)
此代码在构建安装目标时执行,将仅处理文件夹CMAKE_INSTALL_前缀中的元素
相反,我想做的是在构建由CPACK添加的包的过程中运行fixup\u bundle。通过这种方式,生成的安装脚本还将包括externa库
INSTALL(CODE "
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
" DESTINATION bin COMPONENT Runtime)
有人做到了吗?到目前为止,我找到的最佳解决方案不依赖于fixup\u bundle,而是列出运行时配置必须安装的所有文件(例如所有DLL) 给定目标,您可以恢复关联的运行时文件并将其添加到安装项目:
#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)