当前位置: 首页 > 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…...

数电基础(组合逻辑电路+Proteus)

1.组合逻辑电路 1.1组合逻辑电路的分析 1.1.1组合逻辑电路的定义 组合逻辑电路的定义 (1)对于一个逻辑电路,其输出状态在任何时刻只取决于同一时刻的输入状态,而与电路的原来状态无关,这种电路被定义为组合逻辑电路…...

自给自足:手搓了一个睡眠监测仪,用着怎么样?

很久不分享手搓党作品拉! 今天分享一个“基于毫米波雷达的睡眠监测仪”作品! 用Air700E开发板毫米波雷达,手搓一个开箱即用的睡眠监测仪,不花冤枉钱! 来仔细瞧瞧! 一、项目原理及硬件制作 毫米波是指频率…...

Miniforge详细安装教程(macOs和Windows)

(注:主要是解决商业应用anaconda收费问题,这是轻量级的代替,个人完全可以使用anaconda和miniconda) Miniforge 是一个轻量级的包管理器,类似于 Anaconda 和 Miniconda。它主要用于安装基于 conda 的 Python 环境,专注于…...

HDFS Shell作业1

1.在HDFS上建立/user/stu/自己学号,和/user/stu/input目录。 命令: hdfs dfs -mkdir -p /user/stu/22 hdfs dfs -mkdir /user/stu/input 2.用两种不同的方法上传albums.csv至HDFS的学号目录和input目录中。 命令: hdfs dfs -put par…...

工业交换机一键重启的好处

在当今高度自动化和智能化的工业环境中,工业交换机作为网络系统中至关重要的一环,其稳定性和可靠性直接影响到整个生产过程的顺利进行。为了更好地维护这些设备的健康运行,一键重启功能应运而生,并呈现出诸多显著的好处。 首先&am…...

滚雪球学Oracle[4.2讲]:PL/SQL基础语法

全文目录: 前言一、PL/SQL基础语法1.1 变量声明变量声明示例: 二、记录类型与集合类型的使用2.1 记录类型记录类型的定义与使用 2.2 集合类型 三、PL/SQL表与关联数组3.1 PL/SQL表(嵌套表)嵌套表的定义与使用 3.2 关联数组关联数组…...

springboot系列--web相关知识探索二

一、映射 指的是与请求处理方法关联的URL路径,通过在Spring MVC的控制器类(使用RestController注解修饰的类)上使用注解(如 RequestMapping、GetMapping)来指定请求映射路径,可以将不同的HTTP请求映射到相应…...

Oracle 12c在Windows环境下安装

适合初学者使用的Oracle 12c在Windows环境下安装步骤、参数配置、常见问题及参数调优的详细补充说明。 一、Oracle 12c安装步骤 1. 准备工作 在安装Oracle 12c之前,确保你的系统满足以下要求: 操作系统:Oracle 12c支持的Windows版本包括Wi…...

Stable Diffusion绘画 | 来训练属于自己的模型:打标处理与优化

上一篇完成的打标工作,是为了获取提示词,让AI认识和学习图片的特征。 因此,合适、恰当、无误的提示词,对最终模型效果是相当重要的。 Tag 如何优化 通过软件自动生成的 Tag 只是起到快速建立大体架构的作用,里面会涉…...

【论文笔记】Visual Instruction Tuning

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Visual Instruction Tunin…...

东莞网站优化专家/今天重大新闻国内最新消息

char :单字节变量类型&#xff0c;最多表示256个字符&#xff0c; wchar_t :宽字节变量类型&#xff0c;用于表示Unicode字符&#xff0c; 它实际定义在<string.h>里&#xff1a;typedef unsigned short wchar_t。 为了让编译器识别Unicode字符串&#xff0c;必须以在前面…...

网站做代理需要空间是多少钱/邯郸seo优化公司

本文转载自&#xff1a;朱少明老师博客 原文链接&#xff0c;尽快附上。 用一张图告诉你软件测如何学&#xff0c;如何系统的学。 第一模块&#xff1a;定义 1、测试定义&#xff1b; 2、测试标准&#xff1a;国际标准、国内标准&#xff1b; 3、测试原则&#xff1b; 4、软件测…...

wordpress修改浏览量/网站软件下载app

我只有一台机器&#xff0c;并希望使用mesos集群模式运行spark作业 . 使用节点集群运行可能更有意义&#xff0c;但我主要想首先测试mesos以检查它是否能够更有效地利用资源(同时运行多个spark作业而不进行静态分区) . 我尝试了很多方法但没有成功 . 这是我做的&#xff1a;构建…...

旅游类作业网站/短视频培训课程

简介 mitmproxy是一组工具&#xff0c;可为HTTP/1,HTTP/2和WebSockets提供交互式的&#xff0c;具有SSL/TLS功能的拦截代理(可以对Web、Mobile进行抓包)。 mitmproxy 相比Charles、fiddler的优点在于它可以命令行方式或脚本的方式进行mock数据&#xff0c;还可以对请求数据进行…...

建网页还是网站/平台推广员是做什么的

小编典典用Java进行转换并不是魔术&#xff0c;而是告诉编译器A类型的Object实际上是更特定的B类型&#xff0c;因此可以访问B本来没有的所有方法。在执行强制转换时&#xff0c;你没有执行任何魔术或转换操作&#xff0c;实际上是在告诉编译器“相信我&#xff0c;我知道我在做…...

湖北省建设厅网站证件/百度权重排名查询

前言&#xff1a;最近面试无果&#xff0c;就在宿舍看那本《30天自制操作系统》&#xff0c;里面使用的系统文件格式是img&#xff0c;要在真机上运行&#xff0c;就需要使用U盘进行启动&#xff0c;因为现在都没有软盘。而网上很多都是用软件写入U盘的。反正我查过的都是一次写…...