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 的發行版本將被複制到釋出資料夾中。