2013-12-13 18 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)