2011-06-30 68 views
2

我想在我的後構建步驟中複製所需的二進制文件。是否有這個變量的版本列出與庫相關的二進制文件?像${QT_BINARIES}這將列出專門爲包含模塊的文件。CMake QT_LIBRARIES binary equivilent

回答

3

是的,有一個$(QT_LIBRARIES),它將包含您請求的Qt-dll(及其依賴項)。

結合變量$(QT_BINARY_DIR),您可以重建二進制文件的列表。例如。如下所示(從我自己的後構建cmake文件剝離)在Windows上。

foreach(Qt_library ${QT_LIBRARIES}) 
    get_filename_component(Qt_library_name ${Qt_library} NAME_WE) 
    # Note: the following Regex works for me on windows, I am not sure if it 
    # fully portable. 
    string(REGEX REPLACE "^lib(.*)" "\\1" Qt_library_name ${Qt_library_name}) 

    set(Qt_shared_library ${QT_BINARY_DIR}/${Qt_library_name}.dll) 
    if(EXISTS ${Qt_shared_library}) 
     # Add it to the list of 'desired' qt-libraries for later installation 
     list(APPEND Qt_Install_Libraries ${Qt_shared_library}) 
    endif(EXISTS ${Qt_shared_library}) 
endforeach(Qt_library ${QT_LIBRARIES}) 
list(REMOVE_DUPLICATES Qt_Install_Libraries) 
install(FILES ${Qt_Install_Libraries} DESTINATION bin COMPONENT ThirdParty) 

在這種情況下,我在最後一行使用了install-command,但是當然可以用副本替換它。

+0

完美,謝謝。 – badgerr

1

您還應該考慮查看CMake的BundleUtilities功能,該功能會分析共享庫的先決條件,並將其複製到必要的「非系統」庫中(甚至修復它們以便在Mac上使用@executable_path參考),並使您的可執行文件準備好推出自己的必要圖書館的私人副本。

在這裏看到的例子:http://www.cmake.org/Wiki/BundleUtilitiesExample

它是在只有你的可執行文件實際引用的那些Qt庫拉尤其有用...

此操作後,你留下了一個「獨立「你的軟件包應用程序(或可執行文件在同一目錄中的共享庫)的副本,可以安全地複製到另一臺機器上。