Qt CMake

使用 CMake 构建

CMake 是一款用于简化跨不同平台开发项目的构建流程的工具。 CMake 可自动生成构建系统,如 Makefile 和 Visual Studio 项目文件。 CMake 是一个第三方工具,有自己的文档。 本主题介绍如何在 Qt 5 中使用 CMake 3.1.0。

开始使用 CMake

使用 find_package 查找 Qt 附带的库和头文件。 然后,您可以使用 target_link_libraries 命令来使用这些库和头文件,以构建基于 Qt 的库和应用程序。 例如,该命令会自动添加适当的包含目录、编译定义、位置无关代码标志,并链接到 Windows 上的 qtmain.lib 库。

构建 GUI 可执行文件

要构建 helloworld GUI 可执行文件,您需要具备以下条件:

cmake_minimum_required(VERSION 3.1.0)

project(helloworld VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

if(CMAKE_VERSION VERSION_LESS "3.7.0")
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_executable(helloworld
    mainwindow.ui
    mainwindow.cpp
    main.cpp
    resources.qrc
)

target_link_libraries(helloworld Qt5::Widgets)

要使 find_package 成功,CMake 必须通过以下方式之一找到 Qt 安装:

  • 将 CMAKE_PREFIX_PATH 环境变量设置为 Qt 5 安装前缀。这是推荐的方法。
  • 将 CMake 缓存中的 Qt5_DIR 设为 Qt5Config.cmake 文件的位置。

CMAKE_AUTOMOC 设置可在需要时自动运行 moc。更多详情,请参阅CMake AUTOMOC 文档。

导入库目标

每个加载的 Qt 模块都定义了一个 CMake 库目标。目标名称以 Qt5:: 开头,后跟模块名称。例如 Qt5::Core, Qt5::Gui。将目标库的名称传递给 target_link_libraries,即可使用相应的库。

注意:自 Qt 5.15 起,CMake 目标库也可作为 Qt::Core、Qt::Gui 等。这方便了编写可同时使用 Qt 5 和 Qt 6 的 CMake 代码。

导入目标创建时的配置与 Qt 配置时的配置相同。也就是说:

  • 如果 Qt 是用 -debug 开关配置的,则会创建一个带有 DEBUG 配置的导入目标。
  • 如果使用 -release 开关配置 Qt,则会创建一个具有 RELEASE 配置的导入目标。
  • 如果使用 -debug-and-release 开关配置 Qt,则会同时创建 RELEASE 和 DEBUG 配置的导入目标。

如果您的项目有自定义 CMake 编译配置,则必须将自定义配置映射到调试或发布 Qt 配置。

find_package(Qt5 COMPONENTS Core REQUIRED)

set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")

# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

在 CMake 项目中添加库

除 Qt 库外,您还可以在项目中添加其他库。添加过程取决于库的类型和位置:

  • 系统库
  • 你自己的库
  • 第三方库

一旦您的项目成功构建并链接到所添加的库,Qt Creator 将支持代码自动补全和语法高亮显示。

添加自己的库

使用 qt_add_library 命令在 CMakeLists.txt 文件中创建一个库并与之链接,具体做法请参阅 “构建项目”。

指定该库是静态链接还是动态链接。对于静态链接的内部库,在 CMakeLists.txt 项目文件中添加 CMake: target_link_libraries命令来指定依赖关系。

添加外部库

通过外部库,

在使用 CMake 构建 Qt 项目时,集成 Qt 的关键在于正确配置 `CMakeLists.txt` 文件。以下是详细的步骤和相关说明: ### 设置 CMakeLists.txt 1. **查找 Qt 安装位置** 在 `CMakeLists.txt` 文件中,首先需要通过 `find_package` 命令来定位 Qt安装路径。对于 Qt5 和 Qt6,通常使用 Config 模式进行查找。例如: ```cmake find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED) ``` 这里的 `Qt6` 表示使用的 Qt 版本,`COMPONENTS` 后面列出的是所需的模块,如 `Core`, `Gui`, `Widgets` 等。`REQUIRED` 关键字表示这些模块是必需的,如果找不到会报错 [^2]。 2. **链接 Qt 库到目标** 接下来,需要将找到的 Qt 库链接到你的目标可执行文件或库中。这可以通过 `target_link_libraries` 命令完成: ```cmake target_link_libraries(mytarget PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets) ``` 其中 `mytarget` 是你在 `add_executable` 或 `add_library` 中定义的目标名称,`PRIVATE` 表示这些链接关系仅对这个目标有效 [^2]。 3. **包含 Qt 头文件目录** 如果需要显式地指定 Qt 头文件的包含路径,可以使用 `include_directories` 命令: ```cmake include_directories(${Qt6_INCLUDE_DIRS}) ``` 不过,在大多数情况下,`find_package` 已经处理了这些细节,因此可能不需要手动添加 [^1]。 4. **设置 Qt 资源编译器** 如果项目中包含了 `.qrc` 资源文件,还需要确保 CMake 正确地调用了 Qt 的资源编译器: ```cmake qt6_add_resources(mytarget resources.qrc) ``` 这条命令会告诉 CMake 将 `resources.qrc` 文件中的资源编译进 `mytarget` 目标中 [^2]。 5. **生成 moc 文件** 对于使用了 Qt 元对象编译器 (moc) 的类,需要确保 CMake 正确地生成了 moc 文件: ```cmake set(CMAKE_AUTOMOC ON) ``` 这样设置后,CMake 会在构建过程中自动处理所有需要 moc 处理的类 [^1]。 ### 使用 CMake GUI 配置项目 如果你希望使用图形界面来配置项目,可以使用 `cmake-gui` 工具。首先确保已经安装了 `cmake` 和 `cmake-qt-gui` 包: ```bash sudo apt-get install cmake cmake-qt-gui ``` 启动 `cmake-gui` 并选择源代码目录和构建目录,点击 `Configure` 按钮,然后点击 `Generate` 按钮以生成构建文件 [^3]。 ### 示例 CMakeLists.txt 文件 以下是一个完整的 `CMakeLists.txt` 文件示例,展示了如何配置一个简单的 Qt 项目: ```cmake cmake_minimum_required(VERSION 3.14) project(MyQtApp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED) add_executable(MyQtApp main.cpp mainwindow.cpp mainwindow.h) target_link_libraries(MyQtApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets) qt6_add_resources(MyQtApp resources.qrc) ``` 在这个例子中,`main.cpp` 是程序入口点,`mainwindow.cpp` 和 `mainwindow.h` 是主窗口类的实现文件,而 `resources.qrc` 是资源文件 [^2]。 ### 总结 通过以上步骤,你可以成功地将 Qt 集成到 CMake 构建系统中,并为你的项目配置正确的构建环境。确保所有的 Qt 模块都被正确引用,并且构建系统能够找到并链接这些模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十日十行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值