2013-12-13 19 views
3

我想没有列举所有的人都跑CPACK时纳入外部DLL(通过显式调用INSTALL(FILE ...))特定目标运行fixup_bundle(PACKAGE)

用人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。通过这种方式,生成的安装脚本还将包含外部库。

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

回答

0

到目前为止,我发现的最佳解决方案并不依赖于fixup_bundle,而是列出了运行时配置必须安装的所有文件(例如所有dll)。

给定一个目标,你可以恢复相关联的运行文件,并将其添加到安装Project:

#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) 

然后,您可以递归在目标dependenices使用执行相同的两个操作

get_target_property(link_libs ${target} INTERFACE_LINK_LIBRARIES)