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

61 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

```python
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})
```