Files
Obsidian/笔记/CMakeLists-Qt.md
2025-08-23 15:15:57 +08:00

2.6 KiB
Raw Permalink Blame History

cmake_minimum_required(VERSION 3.28)  
project(MyAppClient)  
  
set(CMAKE_CXX_STANDARD 11)  
set(CMAKE_AUTOMOC ON)  
set(CMAKE_AUTORCC ON)  
set(CMAKE_AUTOUIC ON)  
  
set(CMAKE_PREFIX_PATH "C:/Path/QT15/5.15.2/mingw81_64")  
  
find_package(Qt5 COMPONENTS  
        Core  
        Gui  
        Widgets  
        REQUIRED)  
  
add_executable(${PROJECT_NAME} main.cpp)  
target_link_libraries(${PROJECT_NAME}  
        Qt5::Core  
        Qt5::Gui  
        Qt5::Widgets  
)  
  
#1. **检查平台和工具链文件**如果当前平台是Windows且未定义`CMAKE_TOOLCHAIN_FILE`,则执行后续操作。  
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)  
    #2. **设置调试后缀**如果使用的是MSVC编译器且构建类型为Debug则设置`DEBUG_SUFFIX`为"d",否则为空。  
    set(DEBUG_SUFFIX)  
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")  
        set(DEBUG_SUFFIX "d")  
    endif ()  
    #3. **确定Qt安装路径**尝试找到Qt的安装路径如果默认路径不存在则向上查找两级目录。  
    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")  
    if (NOT EXISTS "${QT_INSTALL_PATH}/bin")  
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")  
        if (NOT EXISTS "${QT_INSTALL_PATH}/bin")  
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")  
        endif ()  
    endif ()  
    #4. **复制qwindows.dll**:如果存在`qwindows${DEBUG_SUFFIX}.dll`,则在项目构建完成后将其复制到目标目录的`plugins/platforms/`子目录中。  
    if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")  
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD  
                COMMAND ${CMAKE_COMMAND} -E make_directory  
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")  
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD  
                COMMAND ${CMAKE_COMMAND} -E copy  
                "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"  
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")  
    endif ()  
    #5. **复制Qt库文件**对于每个指定的Qt库在项目构建完成后将其对应的DLL文件复制到目标目录。  
    foreach (QT_LIB Core Widgets Gui Network)  
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD  
                COMMAND ${CMAKE_COMMAND} -E copy  
                "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"  
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>")  
    endforeach (QT_LIB)  
endif ()  
  
#自动复制配置文件  
#file(COPY ${CMAKE_SOURCE_DIR}/ DESTINATION ${CMAKE_BINARY_DIR})