使用CMake将Qt DLL复制到Windows上的可执行目录

对于CMake而言,我很难理解如何使用生成器expression式。 我试图使用add_custom_command来创build一个后生成命令复制Qt的DLL到可执行文件目录。

Qt5WidgetsConfig.cmake我可以看到它为Qt5 :: Widgets目标创build了不同的属性来引用DLL,这取决于当前的活动configuration。 IMPORTED_LOCATION_DEBUGIMPORTED_LOCATION_RELEASE 。 我期望能够使用$<CONFIG:Debug>生成器expression式作为if()的条件但不起作用。

我的CMakeLists.txt:

 # minimum version required for proper support of C++11 features in Qt cmake_minimum_required(VERSION 3.1.0) set(CMAKE_CONFIGURATION_TYPES Debug;Release) # project name and version project(TPBMon VERSION 0.0.0.1) # Qt5 libs find_package(Qt5Widgets REQUIRED) # run Qt's MOC when needed set(CMAKE_AUTOMOC ON) add_executable( tpbmon src/main.cpp src/mainwindow.hpp src/mainwindow.cpp ) target_link_libraries(tpbmon Qt5::Widgets) set_target_properties( tpbmon PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin ) if(WIN32) if($<CONFIG:Debug>) get_target_property(WIDGETDLL Qt5::Widgets IMPORTED_LOCATION_DEBUG) else($<CONFIG:Debug>) get_target_property(WIDGETDLL Qt5::Widgets IMPORTED_LOCATION_RELEASE) endif($<CONFIG:Debug>) add_custom_command( TARGET tpbmon POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${WIDGETDLL} $<TARGET_FILE_DIR:tpbmon> ) endif(WIN32) 

通过修改add_custom_command调用来自己add_custom_command

 add_custom_command( TARGET tpbmon POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Widgets> $<TARGET_FILE_DIR:tpbmon> ) 

一个好的睡眠可以做一个新鲜的视角,这是惊人的。 ;)