5

我想在运行 CPACK 而不枚举所有外部 dll 时合并外部 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 这样生成的安装脚本也将包含外部库。

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

4

1 回答 1

0

到目前为止,我发现的最佳解决方案不依赖于 fixup_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)
于 2017-02-02T08:23:12.813 回答