为特定目标运行fixup_bundle(PACKAGE)

时间:2013-12-13 10:32:33

标签: cmake cpack

我想在运行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库。

有没有人设法做到这一点?

1 个答案:

答案 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)