CMake构建

使用CMake构建

CMake是一个工具,用于简化跨不同平台的开发项目的构建过程。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。

CMake是一个自带的第三方工具证明文件。本主题描述了如何使用CMake3.1.0带Qt 5。

开始使用CMake

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

构建GUI可执行文件

要构建helloworld GUI可执行文件,您需要以下内容:

cpp 复制代码
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安装前缀。这是推荐的方式。 设置Qt5_DIR在......里CMake缓存到Qt5Config.cmake文件。

导入的库目标

加载的每个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开关,将创建一个带有调试配置的导入目标。 如果Qt是用-release开关,就会创建一个带有发布配置的导入目标。 如果Qt是用-debug-and-release开关,然后使用发布和调试配置创建导入的目标。 如果您的项目有自定义CMake构建配置,您必须将您的定制配置映射到debug或release Qt配置。

cpp 复制代码
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模块find_package设置各种变量。

注意:你很少需要直接访问这些变量。像链接一个模块这样的常见任务应该通过每个模块定义的库目标来完成。

举个例子,find_package(Qt5 COMPONENTS Widgets)成功时,将使以下变量可用:

对于找到的所有包find_package,这些变量的等价物是可用的;它们区分大小写。

安装变量

此外,还有一些变量与特定的包无关,而是与Qt安装本身有关。

CMake命令参考

DBus


相关推荐
Elastic 中国社区官方博客5 分钟前
在 Google MCP Toolbox for Databases 中引入 Elasticsearch 支持
大数据·人工智能·elasticsearch·搜索引擎·ai·语言模型·全文检索
非著名架构师6 分钟前
从预测到预调:疾风大模型如何驱动能源电力系统实现“气象自适应”调度?
大数据·人工智能·风光功率预测·高精度光伏功率预测模型·高精度气象数据·高精度天气预报数据·galeweather.cn
cici158747 分钟前
含风电场的十机24时系统机组出力优化算法
人工智能·算法·机器学习
Yeats_Liao9 分钟前
CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等
人工智能·目标跟踪·机器人
亿坊电商10 分钟前
AI数字人交互系统架构全解析:从多模态输入到实时渲染的闭环设计!
人工智能·系统架构·交互
热点速递12 分钟前
AI成广告新引擎:从百度、快手到Meta,智能技术如何拯救互联网广告下滑!
人工智能·百度
fishfuck14 分钟前
MMEvol: Empowering Multimodal Large Language Models with Evol-Instruct
人工智能·语言模型·自然语言处理
技术支持者python,php18 分钟前
USB摄像头采集数据
人工智能·c#
言之。19 分钟前
豆包手机AI Agent技术深度解析
人工智能·智能手机
IT_陈寒20 分钟前
Java并发编程避坑指南:从volatile到ThreadLocal,8个实战案例解析线程安全核心原理
前端·人工智能·后端