2016-11-12 125 views
1

CMake的新功能,我很難理解如何使用生成器表達式。我正在嘗試使用add_custom_command來創建後生成命令,以將Qt DLL複製到可執行文件目錄。使用CMake將Qt DLL複製到Windows上的可執行文件目錄

Qt5WidgetsConfig.cmake我可以看到它爲Qt5 :: Widgets目標創建了不同的屬性來引用DLL,具體取決於當前活動的配置。 IMPORTED_LOCATION_DEBUGIMPORTED_LOCATION_RELEASE。我希望能夠使用$<CONFIG:Debug>生成器表達式作爲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) 

回答

2

想通了自己通過修改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> 
) 

這是驚人觀點後,有什麼新鮮的一個良好的睡眠可以做。 ;)

相關問題