CMake QT LIBRARIES二进制等效

时间:2011-06-30 12:23:09

标签: qt qt4 cmake

我想在构建后的步骤中复制所需的二进制文件。是否有此变量的版本列出与库关联的二进制文件?像${QT_BINARIES}这样的东西会列出专门用于包含模块的文件。

2 个答案:

答案 0 :(得分:3)

是的,有一个$(QT_LIBRARIES),它将包含您请求的Qt-dll(及其依赖项)。

结合变量$(QT_BINARY_DIR),您可以重建二进制文件列表。例如。类似于以下内容(从我自己的构建后的cmakefile中删除)。

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,但当然你可以用副本替换它。

答案 1 :(得分:1)

您还应该考虑查看CMake的BundleUtilities功能,该功能分析共享库先决条件,在必要的“非系统”库中复制(甚至修复它们以便在Mac上使用@executable_path引用),并使您的可执行文件准备就绪有自己的必要库的私人副本。

请参阅此处的示例:http://www.cmake.org/Wiki/BundleUtilitiesExample

仅拉入可执行文件实际引用的Qt库特别有用......

完成此操作后,您将获得捆绑应用程序的“独立”副本(或同一目录中具有共享库的可执行文件),可以安全地复制到另一台计算机。