61 lines
2.6 KiB
Markdown
61 lines
2.6 KiB
Markdown
```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})
|
||
``` |