当前位置: 首页 > news >正文

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(helloworldmainwindow.uimainwindow.cppmain.cppresources.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 变量参考

模块变量

使用 find_package 加载的 Qt 模块会设置各种变量。

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

例如,find_package(Qt5 COMPONENTS Widgets)(Qt5 COMPONENTS Widgets)成功加载后,将提供以下变量:

VariableDescription
Qt5Widgets_COMPILE_DEFINITIONS编译定义列表,用于根据该库进行编译。
Qt5Widgets_DEFINITIONS对照库构建时使用的定义列表。
Qt5Widgets_EXECUTABLE_COMPILE_FLAGS根据程序库构建可执行文件时使用的标志字符串。
Qt5Widgets_FOUND一个布尔值,用于描述是否成功找到模块。
Qt5Widgets_INCLUDE_DIRS针对程序库构建时使用的 include 目录列表。
Qt5Widgets_LIBRARIES模块导入目标的名称: Qt5::Widgets
Qt5Widgets_PRIVATE_INCLUDE_DIRS针对程序库构建和使用私有 Qt API 时要使用的私有 include 目录列表。
Qt5Widgets_VERSION_STRING包含模块版本的字符串。

对于使用 find_package 找到的所有软件包,这些变量都有对应的变量;它们区分大小写。

安装变量

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

QT_DEFAULT_MAJOR_VERSION一个整数,用于控制 Qt 5 和 Qt 6 混合项目中 qt_ 命令转发的 Qt 版本。 需要在调用相应的 find_package() 之前将其设置为 5 或 6。 如果设置为 5,以 qt_ 开始的命令将调用以 qt5_ 开始的对应版本。 如果设置为 6,则会调用以 qt6_ 开始的对应命令。 如果未设置,第一次 find_package 调用将定义默认版本。 此功能在 Qt 5.15 中添加。
QT_LIBINFIX当 Qt 使用 -libinfix 配置时,用于保存库名中使用的后缀的字符串。
QT_NO_CREATE_VERSIONLESS_FUNCTIONS自 Qt 5.15 起,模块不仅定义以 qt5_ 开头的命令,还定义以 qt_ 开头的命令。 你可以在 find_package 之前设置 QT_NO_CREATE_VERSIONLESS_FUNCTIONS,以防止出现这种情况。
QT_NO_CREATE_VERSIONLESS_TARGETS自 Qt 5.15 起,模块不仅定义以 Qt5:: 开头的目标,还定义以 Qt:: 开头的目标。 你可以在 find_package 之前设置 QT_NO_CREATE_VERSIONLESS_TARGETS,以防止出现这种情况。
QT_VISIBILITY_AVAILABLE在 Unix 上,一个布尔值,用于说明 Qt 库和插件在编译时是否使用了 -fvisibility=hidden。 这意味着只导出选定的符号。

CMake 命令参考

Qt5::Core

qt5_add_big_resources

将大型二进制资源编译成目标代码

qt5_add_binary_resources

从 Qt 资源文件列表中创建 RCC 文件

qt5_add_resources

将二进制资源编译成源代码

qt5_generate_moc

在输入文件上调用 moc

qt5_import_plugins

为静态 Qt 构建指定要导入的自定义插件集

qt5_wrap_cpp

从源代码创建 .moc 文件

qt_add_big_resources

将大型二进制资源编译成目标代码

qt_add_binary_resources

从 Qt 资源文件列表中创建 RCC 文件

qt_add_resources

将二进制资源编译成源代码

qt_generate_moc

在输入文件上调用 moc

qt_import_plugins

为静态 Qt 构建指定要导入的自定义插件集

qt_wrap_cpp

从源代码创建 .moc 文件

Qt5::DBus

qt_add_dbus_adaptor

为 D-Bus 接口生成适配器类

qt_add_dbus_interface

为 D-Bus 接口描述文件生成实现接口的 C++ 源代码

qt_add_dbus_interfaces

为 D-Bus 接口描述文件生成实现接口的 C++ 源代码

qt_generate_dbus_interface

从头文件生成 D-Bus 接口

Qt5::LinguistTools

qt5_add_translation

将 Qt Linguist .ts 文件编译成 .qm 文件

qt5_create_translation

设置 Qt Linguist 翻译工具链

Qt5::RemoteObjects

qt5_generate_repc

从 Qt Remote Objects .rep 文件创建 C++ 类型

Qt5::Widgets

qt5_wrap_ui

为 .ui 文件创建源代码

qt_wrap_ui

为 .ui 文件创建源代码

CMake命令

cmake-variables(7) — CMake 3.30.4 Documentation

CMake 变量

cmake-variables(7) — CMake 3.30.4 Documentation

CMake Command Reference | Build with CMake 5.15.17 (qt.io)

相关文章:

Qt CMake

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

制造企业各部门如何参与生产成本控制与管理?

​国内制造业的分量可不轻,从日常生活用品到高端工业设备,中国制造几乎涵盖了各个领域。 不过很多制造业企业在管理方面确实存在一些难题:成本控制不容易,产品质量并不稳定,生产周期也常常较长。 一、中国制造业生产管…...

FireRedTTS - 小红书最新开源AI语音克隆合成系统 免训练一键音频克隆 本地一键整合包下载

小红书技术团队FireRed最近推出了一款名为FireRedTTS的先进语音合成系统,该系统能够基于少量参考音频快速模仿任意音色和说话风格,实现独特的音频内容创造。 FireRedTTS 只需要给定文本和几秒钟参考音频,无需训练,就可模仿任意音色…...

活体检测标签之2.4G有源RFID--SI24R2F+

首先从客户对食品安全和可追溯性的关注切入,引出活体标签这个解决方案。接着分别阐述活体标签在动物养殖和植物产品方面的应用,强调其像 “身份证” 一样记录重要信息,让客户能够了解食品的来源和成长历程,从而放心食用。最后呼吁…...

Web3Auth 如何工作?

Web3Auth 用作钱包基础设施,为去中心化应用程序 (dApp) 和区块链钱包提供增强的灵活性和安全性。在本文档中,我们将探索 Web3Auth 的功能,展示它如何为每个用户和应用程序生成唯一的加密密钥提供程序。 高级架构 Web3Auth SDK 完全存在于用…...

问:SQL中join语法的差异?

在SQL中,JOIN语法用于结合来自两个或多个表的数据。不同类型的JOIN会基于不同的条件来合并表中的数据。以下是几种常见的JOIN及其差异: 假设我们有两个表:employees 和 departments。 employees 表: employee_idnamedepartment_id1Alice10…...

计算机网络各层有哪些协议?计算机网络协议解析:从拟定到实现,全面了解各层协议的作用与区别

在数字化时代,计算机网络无处不在,已经成为不可或缺的一部分。为了让不同设备能够有效地进行通信,网络协议作为一种约定和规则,确保了数据在网络中的可靠传输。今天,我们将深入探讨计算机网络的各层协议,详…...

解决方案:机器学习中,基学习器 跟 弱学习器,有什么区别

文章目录 一、现象二、解决方案 一、现象 在工作中,在机器学习中,有时候会看到基学习器 跟 弱学习器,会容易混淆,所以整理一下 二、解决方案 在机器学习中,“基学习器”(Base Learner)和“弱…...

【Python】ftfy 使用指南:修复 Unicode 编码问题

ftfy(fixes text for you)是一个专为修复各种文本编码错误而设计的 Python 工具。它的主要目标是将损坏的 Unicode 文本恢复为正确的 Unicode 格式。ftfy 并非用于处理非 Unicode 编码,而是旨在修复因为编码不一致、解码错误或混合编码导致的…...

第9课-C++String功能的探索

1:C 语言中的字符串 vs C string 类 1.1 C 语言中的字符串 在 C 语言中,字符串本质上是以 \0 结尾的字符数组。C 标准库为此提供了 str 系列函数,如 strlen()、strcpy() 和 strcat() 等。虽然这些函数可以操作字符串,但它们的操…...

基于Hive和Hadoop的保险分析系统

本项目是一个基于大数据技术的保险分析系统,旨在为用户提供全面的汽车保险信息和深入的保险价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark…...

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近,到了国庆节,自己呆在学校当守校人,太无聊了,顺便做一个小demo帮祖国目前庆生!!! 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…...

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化 阿里 MySQL 命名规范MySQL8 DDL的原子化 阿里 MySQL 命名规范 【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价…...

PyTorch源码系列(一)——Optimizer源码详解

目录 1. Optimizer类2. Optimizer概览3. 源码解析3.1 构造方法3.1.1 全局设置情形3.1.2 局部设置情形3.1.3 覆盖测试3.1.4 逐行讲解 3.2 add_param_group3.3 step3.4 zero_grad3.5 self.state3.6 state_dict3.7 load_state_dict 4. SGD Optimizer5. 极简版Optimizer源码6. 自定…...

Java - LeetCode面试经典150题(三)

区间 228. 汇总区间 题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中…...

基于SpringBoot+Vue+MySQL的民宿预订平台

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着旅游业的蓬勃发展,民宿作为一种独特的住宿方式,受到了越来越多游客的青睐。然而,传统的民宿预定方式往往存在信息不对称、效率低下等问题,难以满足游客的个性化需…...

Hadoop krb5.conf 配置详解

krb5.conf文件是Kerberos认证系统中的一个关键配置文件,它包含了Kerberos的配置信息,如KDC(Key Distribution Centers)和Kerberos相关域的管理员服务器位置、当前域和Kerberos应用的默认设置、以及主机名与Kerberos域的映射等。以…...

工程师 - DNS请求过程

DNS(Domain Name System,域名系统)是互联网的重要基础设施之一,其主要功能是将人们容易记忆的域名(例如 www.example.com)转换为计算机能识别的IP地址(例如 192.0.2.1),类…...

Solidity智能合约中的事件和日志

1. Solidity 中的事件和日志概述 1.1 什么是事件? 在 Solidity 中,事件(Event)是一种允许智能合约与外部世界进行通信的机制。通过触发事件,可以记录合约执行中的关键操作,并将这些操作发送到链上。事件的…...

第四十一篇-Docker安装Neo4j

创建目录 mkdir /opt/neo4j-data创建 docker run \ -d --name neo4j \ -p 7474:7474 -p 7687:7687 \ -v /opt/neo4j-data/data:/data \ -v /opt/neo4j-data/logs:/logs \ -v /opt/neo4j-data//conf:/var/lib/neo4j/conf \ -v /opt/neo4j-data/plugins:/plugins \ --env NEO4J…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...