使用 CMake 构建完整的 Qt 项目

【文章来源于知乎 Qt小徐,这里记录一下后续有空慢慢学习】

前言

我们开发 Qt 项目时,一般是使用 Qt 官方的 Qt Creator 进行开发。但是 Qt Creator 的一些问题让我们不得不使用别的编辑器或 IDE,例如中文字体丑、中文汉化不全和界面丑等问题。为了使用别的编辑器,我们就需要使用 CMake 进行构建。同时当我们的 Qt 项目有跨平台的需求时,使用 CMake 构建更为方便。

那我就来总结一下如何使用 CMake 构建完整的 Qt 项目,其中包括了 Qt 各种第三方文件的编译,例如界面文件和资源文件,此处默认大家已经掌握了 CMake 的基本使用方法。

环境

我以 MinGW 为编译器进行举例,其它类似:

构建工具:CMake 3.25.1

编译器:MinGW-w64 8.1.0 64bit

Qt 库:Qt 5.15.2 MinGW-w64 8.1.0 64bit

构建

项目结构

我以一个带有源文件、界面文件和资源文件的项目举例,build 目录为项目的构建目录

├─CustomWindow
│   │   CMakeLists.txt
│   │
│   ├─build
│   │
│   └─src
│           main.cpp
│           resource.qrc
│           style.css
│           titlebar.cpp
│           titlebar.h
│           xwidget.cpp
│           xwidget.h
│           xwidget.ui

构建代码

接下来的代码在 CMakeLists.txt 文件中完成。

第一步

# 指定版本和项目 
cmake_minimum_required(VERSION 3.10) 
project(CustomWindow)

由于 CMake 3.7 版本以前的构建规则和 CMake 3.7 以后有所不同,因此我们定义 CMake 的最低版本为 CMake 3.10,同时我们指定了项目的名字。

第二步

# 开启自动编译 
set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTOUIC ON) 
set(CMAKE_AUTORCC ON)

这段代码开启了 CMake 的元对象+编译器、界面编译器和资源编译器自动编译,这样当项目使用了包含元对象的文件、界面文件和资源文件时 CMake 可以自动检测并编译。

第三步

# 匹配文件 
file(GLOB SOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB RESOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.qrc)

使用 file GLOB 指令可以按照后面指定的匹配规则匹配多个文件,同时将其存入一个变量。这里我们将所有的源文件和资源文件分别存入 SOURCE_FILE 和 RESOURCE_FILE 变量中,是因为要使用资源文件的话需要单独指定资源文件的地址,而元对象和界面文件不需要。

第四步

# 链接可执行文件 
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(${PROJECT_NAME} ${SOURCE_FILE} ${RESOURCE_FILE}) 
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

首先我们需要寻找 Qt 的库文件用于链接,Widgets 代表需要 Widgets 模块,如果项目用到了其它模块也需要添加。接着生成可执行文件,需要将源文件和资源文件传进来用于编译。最后添加链接库用于链接,Qt5::Widgets 代表链接 Qt5::Widgets 模块,如果项目用到了其它库也需要添加。

注意

  1. 以上代码的顺序最好不要交换,否则可能会发生错误。
  2. 资源文件一定要单独添加到 add_excutable 名命令中,否则不会编译,而使用元对象的文件和界面文件不用单独添加。
  3. 如果构建出错提示找不到 Qt 库,可能需要手动指定 Qt 库的地址,代码如下:
# Qt_PATH 为 Qt 的安装地址
set(QT_PATH "C:\Qt\5.15.2\mingw81_64") set(CMAKE_PREFIX_PATH ${QT_PATH}/lib/cmake)

编译运行

最后运行 CMake 构建命令,可执行文件就生成了出来。但是想要运行我们还得添加 Qt 动态链接库的环境变量,具体不再演示,大家自行搜索教程。

结尾

在此贴上完整的构建代码:

# 指定版本和项目
cmake_minimum_required(VERSION 3.10)
project(CustomWindow)

# 设置 Qt 库的地址(按需设置)
# set(QT_PATH "C:\Qt\5.15.2\mingw81_64")
# set(CMAKE_PREFIX_PATH ${QT_PATH}/lib/cmake)

# 开启自动编译
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# 匹配文件
file(GLOB SOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB RESOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.qrc)

# 链接可执行文件
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(${PROJECT_NAME} ${SOURCE_FILE} ${RESOURCE_FILE})
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值