VS2022配置qt5 cmake项目
1. 目的
用VS2022创建一个cmake项目,编辑CMakelists.txt。
2. CMakelist.txt 详细说明
1)配置项目
新建CMakelists.txt文件。添加所需要的宏定义和CXX编译器标准。
cmake_minimum_required(VERSION 3.18)
project(05testQ5Mingw_02)
set(CMAKE_CXX_STANDARD 14)
2)配置搜索路径
使用find_package来启用Qt5模块,并设置必要的变量。
※ 设置启用自动编译moc、rcc和ui。
※ 设置AUTOMOC生成路径。
※ 设置qt5安装路径。
※ 搜索库,并将搜索到的 Qt5Widgets_INCLUDE_DIRS 路径添加到项目包含路径中。
set(CMAKE_AUTOMOC ON) # 启用自动moc处理
set(CMAKE_AUTORCC ON) # 启用自动rcc处理
set(CMAKE_AUTOUIC ON) # 启用自动uic处理,如果使用.ui文件的话
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC_RELAXED_MODE ON)
set(CMAKE_AUTOMOC_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/moc)
message('MOC GENERATED: ${CMAKE_CURRENT_BINARY_DIR}/moc')
# 设置qt安装路径
set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.14.2/5.14.2/msvc2017_64")
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
# 添加Qt5Widgets包含路径...
include_directories(${Qt5Widgets_INCLUDE_DIRS})
3)手动生成uic
# uic手动生成的ui_xxx.h文件将输出到 project_dir/generate 目录。
include_directories(05testQ5Mingw_02 PRIVATE ${CMAKE_SOURCE_DIR}/generate)
# 使用命令手动处理uic生成 ui_xxx.h文件。
# 需要uic处理的界面文件设置为数组
set(UI_FILES recieveQtApp_main.ui xxxx.ui)
# 定义UIC处理的文件。包括设置输出路径和文件名:
# ... ${CMAKE_SOURCE_DIR}/generate/ui_${UI_FILE_NAME}.h
set(GENERATED_UI_FILES )
foreach(UI_FILE ${UI_FILES})
get_filename_component(UI_FILE_NAME ${UI_FILE} NAME_WE)
set(GENERATED_UI_FILES ${GENERATED_UI_FILES} ${CMAKE_SOURCE_DIR}/generate/ui_${UI_FILE_NAME}.h)
endforeach()
# 通过qt uic命令,逐个编译ui生成头文件。并将输出文件“GENERATED_UI_FILES”添加到编译目标文件中。
#add_executable (${PROJECT_NAME} ...程序源文件... ${GENERATED_UI_FILES})
foreach(UI_FILE ${UI_FILES})
get_filename_component(UI_FILE_NAME ${UI_FILE} NAME_WE)
add_custom_command(
OUTPUT ${CMAKE_SOURCE_DIR}/generate/ui_${UI_FILE_NAME}.h
COMMAND uic ${CMAKE_SOURCE_DIR}/${UI_FILE} -o ${CMAKE_SOURCE_DIR}/generate/ui_${UI_FILE_NAME}.h
DEPENDS ${UI_FILE}
)
endforeach()
4)添加ui_.h包含
将生成的 ui_xxx.h添加到项目中。添加头文件, 和添加包含路径。【注意】添加:${Qt5Widgets_INCLUDE_DIRS}
include_directories(${PROJECT_NAME} PRIVATE
src
inc
generate # 这是uic输出的 ui_xxxxx.h 目录
${Qt5Widgets_INCLUDE_DIRS}
)
5)创建目标文件
创建目标文件(exe)。add_executable命令来创建可执行目标
add_executable(${PROJECT_NAME} ${你自定义的包含路径_head} main.cpp
... 其它源程序和头文件
you_qt_app_.qrc
${GENERATED_UI_FILES}
)
6)链接库
target_link_libraries(${PROJECT_NAME}
Qt5::Core
Qt5::Gui
Qt5::Widgets
)