Qt5 dll 复制示例

因此,假设你有一个依赖于 Qt5 的项目,你需要将相关的 dll 复制到你的构建目录中,而你不想手动执行; 你可以做以下事情:

cmake_minimum_required(VERSION 3.0)
project(MyQtProj LANGUAGES C CXX)
find_package(Qt5 COMPONENTS Core Gui Widgets)
#...set up your project

# add the executable
add_executable(MyQtProj ${PROJ_SOURCES} ${PROJ_HEADERS})
    
add_custom_command(TARGET MyQtProj POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Core> $<TARGET_FILE_DIR:MyQtProj>
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Gui> $<TARGET_FILE_DIR:MyQtProj>
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Widgets> $<TARGET_FILE_DIR:MyQtProj>
    )

因此,现在每次构建项目时,如果目标 dll 已经更改了要复制的内容,那么它们将在你的目标(在本例中为主可执行文件)构建之后被复制(请注意 copy_if_different 命令); 否则,他们将不会被复制。

另外,请注意这里使用生成器表达式 。使用这些的优点是你不必明确说明在哪里复制 dll 或使用哪些变体。但是,为了能够使用这些,你正在使用的项目(在本例中为 Qt5)必须具有导入的目标。

如果你在 debug 中构建,那么 CMake 知道(基于导入的目标)将 Qt5Cored.dll,Qt5Guid.dll 和 Qt5Widgetsd.dll 复制到你构建文件夹的 Debug 文件夹中。如果你正在发布版本中,那么 .dll 的发行版本将被复制到发布文件夹中。