针对特定目标运行fixup_bundle(包)

Pie*_*igi 5 cmake cpack

我想在运行CPACK时合并外部dll,而不枚举所有外部dll(通过显式调用INSTALL(FILE ...))

使用fixup_bundle,可以通过复制所需的库来修复安装文件夹(CMAKE_INSTALL_PREFIX)中的所有可执行文件。

INSTALL(CODE "
   include(BundleUtilities)
   fixup_bundle(\"${APPS}\"   \"\"   \"${DIRS}\")
   " DESTINATION bin COMPONENT Runtime)
Run Code Online (Sandbox Code Playgroud)

此代码在构建INSTALL目标时执行,并且仅处理存在于文件夹CMAKE_INSTALL_PREFIX中的元素。

我想做的是在CPACK添加的PACKAGE目标的构建过程中运行fixup_bundle。这样,生成的安装脚本还将包括externa库。

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

Pie*_*igi 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) 
Run Code Online (Sandbox Code Playgroud)

然后,您可以递归目标依赖项以使用以下命令执行相同的两个操作

get_target_property(link_libs ${target} INTERFACE_LINK_LIBRARIES)
Run Code Online (Sandbox Code Playgroud)