CMake结合Visual Studio中开发Qt应用程序注意事项

Qt工程管理

个人比较偏爱于使用CMake来管理C++工程,因为只要编写一个CMakeLists.txt文件,就可以在Windows和Mac上生成各自的IDE工程。在Windows上, CMake自然是生成Visual Studio工程文件了(新版Visual Studio貌似能直接倒入CMake工程了);Mac上生成XCode工程即可。开发Qt应用程序的时候,虽然有Qt Creator可以使用,甚至Qt Creator还可以直接导入CMake工程,但是其调试和错误提示功能实在太过寒碜,导致调试过程中各种郁闷。因此,本人在实际开发中一般使用CMake来管理Qt工程,然后在Visual Studio里面进行开发编译。一般一个Qt应用程序的CMakeLists文件结构如下:

CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
PROJECT(Test C CXX)

#############################################################################
# Compiler and linker options
ADD_DEFINITIONS(-Wall -DWIN32_LEAN_AND_MEAN) 

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_AUTORCC ON) 
SET(CMAKE_CXX_STANDARD 11) 

FILE(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
FILE(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 
FILE(GLOB FORMS "${CMAKE_CURRENT_SOURCE_DIR}/*.ui") 
 
SET(RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/resources.qrc)  
  
  
#################################################################################
# EXTERNAL LIBS
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Gui REQUIRED) 
qt5_wrap_ui(UI_HEADERS ${FORMS})

INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}/)

################################################################################
# Compile target
ADD_EXECUTABLE ( ${PROJECT_NAME} 
				${SOURCE_FILES}
				${HEADER_FILES}
				${UI_HEADERS}  
				${RESOURCES}) 
# https://www.kdab.com/using-cmake-with-qt-5/
qt5_use_modules(${PROJECT_NAME} Core Widgets Gui)  

其中,有一点要注意的是“INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/)。这一行是为了包含UI生成的头文件,否则在编译的时候无法找到UI头文件会报错。

备注

使用CMake生成Qt工程,编译运行的时候需要注意一些事情。如果机器上装了多个版本的Qt库的话,使用CMake生成Qt工程的时候,最容易出错了。CMake在生成工程的时候,会去搜索用户和系统的Path路径,查找系统上安装的Qt库。如果工程编译后,再去修改PATH中的Qt版本路径,会出现一些诡异的现象。像我碰到的一些情况包括:(1)程序启动不起来或者报错“xxx找不到符号入口点”;(2)资源加载不到,典型的特征是使用QRC路径(如“:/style/default.qss”)来加载资源会失败;(3)程序无故崩溃或执行结果不正常。但凡出现了这样一些情况,而恰好工程又是采用CMake管理的,那么就要考虑下Qt库版本是不是混淆了。

posted @ 2018-05-07 12:14  24K纯开源  阅读(1403)  评论(0编辑  收藏  举报