入门采用 CMake

开始采用 find_package 以定位 Qt 随附的库和 Header (头) 文件。然后,可以使用这些库和 Header (头) 文件采用 target_link_libraries 命令来构建基于 Qt 的库和应用程序。此命令自动添加适当包括目录、编译定义、位置无关代码标志并链接到 qtmain.lib 库在 Windows,例如。

构建 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)
					

For find_package 要取得成功, CMake 必须按以下方式之一找到 Qt 安装:

  1. 设置 CMAKE_PREFIX_PATH 环境变量为 Qt 5 安装前缀。这是推荐方式。
  2. 设置 Qt5_DIR CMake 缓存为位置对于 Qt5Config.cmake 文件。

The 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 配置创建导入目标。
  • 若有配置 Qt 采用 -release 开关,则采用 RELEASE 配置创建导入目标。
  • 若有配置 Qt 采用 -debug-and-release 开关,则采用 RELEASE 和 DEBUG 配置创建导入目标。

若您的工程有自定义 CMake 构建配置,必须将自定义配置映射到 debug (调试) 或 release (发行) 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 CMake 变量参考