入門采用 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")