我想在运行CPACK时合并外部dll而不枚举所有这些(通过显式调用INSTALL(FILE ...))
使用 fixup_bundle ,可以通过复制所需的库来修复安装文件夹中的所有可执行文件( CMAKE_INSTALL_PREFIX )。
INSTALL(CODE "
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
" DESTINATION bin COMPONENT Runtime)
此代码在构建 INSTALL 目标时执行,并且只处理文件夹CMAKE_INSTALL_PREFIX中的元素。
我想要做的是在构建由CPACK添加的 PACKAGE 目标期间运行 fixup_bundle 。这样生成的安装脚本也将包含externa库。
有没有人设法做到这一点?
答案 0 :(得分:0)
到目前为止,我找到的最佳解决方案不依赖于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)