cmake_minimum_required(VERSION 3.28)
set(projectName "MyDocumentViewer")
project(${projectName} VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 26)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "D:/platform/qt601/sources/6.6.1/mingw_64/lib/cmake")
set(CLION_INSTALL_PATH "D:/tool/CLion 2023.3")
add_executable(${projectName} main.cpp)
find_package(Qt6 COMPONENTS
        Core
        Gui
        Widgets
        REQUIRED)

target_link_libraries(${projectName}
        Qt::Core
        Qt::Gui
        Qt::Widgets
)

set_target_properties(${projectName} PROPERTIES
        WIN32_EXECUTABLE ON
        MACOSX_BUNDLE ON
)


if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(DEBUG_SUFFIX)
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif ()
    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 ()
    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 ()
    foreach (QT_LIB Core Gui Widgets)
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>")
    endforeach (QT_LIB)
endif ()

file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")

foreach(DLL_FILE ${DLL_FILES})
    file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()

解释下后面的依托:

if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(DEBUG_SUFFIX)
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif ()
    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 ()
    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 ()
    foreach (QT_LIB Core Gui Widgets)
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$<TARGET_FILE_DIR:${PROJECT_NAME}>")
    endforeach (QT_LIB)
endif ()

复制 foreach (QT_LIB Core Gui Widgets)里的.dll和plugun/windows.dll,并不好用,建议用toolChain

file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")

foreach(DLL_FILE ${DLL_FILES})
    file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()

复制链接库

如果要分文件夹:

add_subdirectory(src)
add_subdirectory(resources)

./src:

set(PROJECT_SOURCES
        main.cpp
)

qt_add_executable(${projectName}
#                MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
)

./resources:

set(SOURCES_FILES
        ic.png
        ico.ico
)
foreach (file ${SOURCES_FILES})
    configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/${file} COPYONLY)
endforeach ()

for qml:

cmake_minimum_required(VERSION 3.16)
set(projectName ctestqml01)
project(${projectName} VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "E:\\platform\\qt6.8\\6.8.0\\mingw_64\\lib\\cmake")
set(CLION_INSTALL_PATH "E:\\tool\\jetbrains\\CLion 2024.1.1")
find_package(Qt6 6.5 REQUIRED COMPONENTS Quick)

qt_standard_project_setup(REQUIRES 6.5)

qt_add_executable(app${projectName}
        main.cpp
)

qt_add_qml_module(app${projectName}
        URI ${projectName}
        VERSION 1.0
        QML_FILES
        Main.qml
)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
set_target_properties(app${projectName} PROPERTIES
        #    MACOSX_BUNDLE_GUI_IDENTIFIER com.example.app${projectName}
        MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        MACOSX_BUNDLE TRUE
        WIN32_EXECUTABLE TRUE
)

target_link_libraries(app${projectName}
        PRIVATE Qt6::Quick
)

include(GNUInstallDirs)
install(TARGETS app${projectName}
        BUNDLE DESTINATION .
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

file(GLOB DLL_FILES "${CLION_INSTALL_PATH}/bin/mingw/bin/*.dll")

foreach(DLL_FILE ${DLL_FILES})
    file(COPY ${DLL_FILE} DESTINATION ${CMAKE_BINARY_DIR})
endforeach()