使用Visual Studio进行Qt开发的时候,我们可以借用Cmake的moc功能和相应对Qt的支持生成VS工程。
文件组织
Root
│ cmake.sh // cmake执行脚本
│ CMakeLists.txt // 根目录cmake文件
│ README.md
│ text.txt
├─bin // 生成物存放目录
├─form
│ mainwindow.ui // ui文件目录
├─include // 头文件目录
│ mainwindow.h
├─resource // 资源文件目录
│ resource.qrc
└─source // CPP等源文件目录
main.cpp
mainwindow.cpp
Cmake模版
Cmake模版如下,执行cmake命令即可生成visual studio工程
#指定cmake的最小版本号
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
#指定项目名称
PROJECT(Test LANGUAGES CXX)
# SET(QT5_DIR "D:\\Qt\\5.15.2\\msvc2019\\lib\\cmake\\Qt5")
#指定Qt路径和启用当前目录(按需设置)
# SET(CMAKE_PREFIX_PATH ${QT_PATH}/lib/cmake)
SET(CMAKE_PREFIX_PATH D:/Qt/5.15.2/msvc2019/lib/cmake)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
SET(PROJECT_DIR "./")
SET(CMAKE_AUTOMOC ON)
#引入Qt库
FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
# FIND_PACKAGE(Qt5Sql REQUIRED)
# FIND_PACKAGE(Qt5Network REQUIRED)
# FIND_PACKAGE(Qt5Concurrent REQUIRED)
#添加预编译宏
ADD_DEFINITIONS(-DTORRENT_LIBRARY)
ADD_DEFINITIONS(-DNO_FREETYPE)
ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
ADD_DEFINITIONS(-DHCPP_LEGACY_API)
#将各种文件归类到指定变量
FILE(GLOB_RECURSE HEADER_FILES "include/*.h")
FILE(GLOB_RECURSE SRC_FILES "source/*.cpp")
FILE(GLOB_RECURSE FORMS "*form/*.ui")
FILE(GLOB_RECURSE RESOURCE_FILES "resource/*.qrc")
#FILE(GLOB TS_FILES "*.ts")
FILE(GLOB MOC_FILES "moc_*.cpp")
#将ui文件编译成ui_*.h文件
IF(FORMS)
QT5_WRAP_UI(FORMS_UIC ${FORMS})
ENDIF()
#将包含Q_OBJECT的头文件编译成moc_*.cpp文件
QT5_WRAP_CPP(MOC_FILES ${HEADER_FILES})
#启用qrc资源文件
QT5_ADD_RESOURCES(RES_FILES resource/resource.qrc)
#启用当前头文件目录
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
#将ui文件和生成文件整理在一个文件夹中
SOURCE_GROUP("Form Files" FILES ${FORMS})
#将qrc资源文件整理在一个文件夹中
SOURCE_GROUP("resource" FILES ${RESOURCE_FILES})
#查找当前目录下所有的.h和.cpp文件
SOURCE_GROUP("include" FILES ${HEADER_FILES})
SOURCE_GROUP("source" FILES ${SRC_FILES})
#翻译文件
#SOURCE_GROUP("Translation" FILES ${TS_FILES})
#将MOC,UI,QRC的中间生成文件编译进EXE中
SOURCE_GROUP("Generated" FILES ${MOC_FILES} ${FORMS_UIC} ${RES_FILES} ${TS_FILES})
#引入库目录路径
LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/bin)
#将所有文件编译成EXE,并设置以WIN32的方式运行
ADD_EXECUTABLE(${PROJECT_NAME} WIN32 ${HEADER_FILES} ${SRC_FILES} ${MOC_FILES} ${FORMS_UIC} ${RESOURCE_FILES} ${RES_FILES})
#设置EXE文件的输出目录
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/../bin)
#引入库目录头文件
INCLUDE_DIRECTORIES(${AUTOGEN_BUILD_DIR})
INCLUDE_DIRECTORIES(${PROJECT_DIR}/include)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
#INCLUDE_DIRECTORIES(../Define ../Algorithm)
#链接以上lib库
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PROJECT_LIBRARIES})
#加载静态LIB
#TARGET_LINK_LIBRARIES(${PROJECT_NAME}
# Algorithm.lib
#)
#启用Qt的库模块
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui)
QT5_USE_MODULES(${PROJECT_NAME} Widgets Core Gui)