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

QT之CMAKE教程

介绍

CMake 是一个跨平台的自动化构建系统,它使用配置文件(称为 CMakeLists.txt)来生成标准的构建文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程文件。CMake 能够支持多种编程语言,尤其是 C 和 C++,并且可以与多种编译器和构建工具配合使用。

以下是 CMake 的一些关键特点:

  1. 跨平台支持: CMake 支持在 Windows、Linux、macOS 等多种操作系统上构建项目。

  2. 生成多种构建系统: CMake 可以生成多种构建系统的文件,包括 Make、Ninja、Xcode 和 Visual Studio 解决方案等。

  3. 模块化: CMake 提供了模块化的设计,允许开发者重用代码和设置。

  4. 自定义构建类型: CMake 允许定义不同的构建类型,如 Debug、Release 或自定义构建类型。

  5. 依赖管理: CMake 可以处理复杂的依赖关系,并自动下载和集成第三方库。

  6. 测试驱动开发(TDD): CMake 支持 CTest,这是一个测试驱动开发工具,可以轻松地集成到构建过程中。

  7. 安装和打包: CMake 提供了安装目标和打包支持,可以生成安装程序和软件包。

  8. 变量和条件逻辑: CMake 脚本使用变量和条件逻辑来控制构建过程,使得构建配置非常灵活。

  9. 查找和配置外部库: CMake 可以查找和配置外部库,使得集成第三方库变得简单。

  10. 多配置工具: CMake 支持多配置工具,这意味着它可以生成支持多个配置(如 Debug 和 Release)的构建系统。

  11. IDE 集成: CMake 可以生成 IDE 项目文件,如 Visual Studio 或 Xcode 项目,使得在这些环境中工作变得容易。

CMake 的基本工作流程包括:

  • 编写 CMakeLists.txt 文件,定义项目的构建规则和配置。
  • 运行 cmake 命令,指定源代码目录和构建目录,生成构建系统。
  • 使用生成的构建系统(如 Make 或 IDE)来编译和构建项目。

CMake 是许多开源项目和商业软件的首选构建系统,因为它的灵活性和强大的功能使得它能够适应各种复杂的构建需求。

常用的命令

指定最低版本:cmake_minium_required

指定使用的cmake最低版本

定义工程名称:protect

定义工程名称

 生成可执行程序:add_executable

定义工程会生成一个可执行程序,生成的程序,和项目名没有关系。

 

执行cmake生成形式

执行版本为 Debug还是Release,有时候构建报错::-1: error: No "Debug" CMake configuration found. Available configuration: "".
Make sure that CMAKE_BUILD_TYPE variable matches the "Build type" field. 就需要添加这个参数

执行cmake

注意 

 在Windows下使用cmake ..  会生成vs的项目架构。不会生成MakeFile文件,如果windows下想要生成MakeFile需要输入命令  cmake ../ -G "Unix Makefiles"。来生成,最后执行make命令进行项目的编译。

私人定制

定义变量:set

 指定使用的C++标准:CMAKE_CXX_STANDARD

指定输出路径:EXECUTABLE_OUTPUT_PATH

如果指定的路径不存在,那么cmake会自动创建多层级的目录。

 搜索文件

方式一:aux_source_directory

PROJECT_SOURCE_DIR:搜索cmake 执行后后面指定路径的当前源文件路径下的文件.c .cpp ,添加到SRC_LISTS中
 

 方式二:file

CMAKE_CURRENT_SOURCE_DIR: CMAKE文件所对应的路径  经过本人亲测:file只搜索cpp文件,也是可以编译通过的。

包含头文件路径:include_directories

        

 通过CMAKE制作库文件

 静态库就是STATIC,动态库就是SHARED。

 指定动态库的输出路径

链接静态库 :link_libraries

链接动态库:target_link_libraries

 

日志

 宏定义:add_definitions

相关文章:

QT之CMAKE教程

介绍 CMake 是一个跨平台的自动化构建系统,它使用配置文件(称为 CMakeLists.txt)来生成标准的构建文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程文件。CMake 能够支持多种编程语言,尤其是 C 和 C&#…...

网络安全 | 0day漏洞介绍

关注:CodingTechWork 引言 在网络安全领域,0day漏洞(Zero-day Vulnerability)是指一个尚未被厂商、开发者或安全人员发现、修复或发布修补程序的安全漏洞。0day漏洞是黑客利用的一个重要攻击工具,因其未被披露或未被修…...

关于WPF中ComboBox文本查询功能

一种方法是使用事件&#xff08;包括MVVM的绑定&#xff09; <ComboBox TextBoxBase.TextChanged"ComboBox_TextChanged" /> 然而运行时就会发现&#xff0c;这个事件在疯狂的触发&#xff0c;很频繁 在实际应用中&#xff0c;如果关联查询数据库&#xff0…...

07_游戏加载窗口

隐藏动态提示窗口 创建空节点 命名为 LoadingWnd 意为加载窗口 并设置全屏 在子级下创建Image作为加载背景 也设置成全屏 将以下资源放进Art文件夹中 设置好精灵模式后拖拽至 Image的Source Image框选 创建文本作为提示内容 增加描边组件OutLine可以美化字体 创建Image作为加载…...

awk命令进阶

1.连接文件 awk NRFNR{a[$1]$0;next} NR!FNR{ if(($5) in a) print a[$1],$0 } file1 file2 命令详解&#xff1a; 这个命令的目的是将 file1 和 file2 基于某个共同字段进行连接&#xff08;类似于 SQL 中的 JOIN 操作&#xff09;。下面我们逐步解析它的工作原理。 1. NRF…...

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下&#xff0c;信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法&#xff0c;作为我国自主研发的密码算法体系&#xff0c;宛如坚固的盾牌&#xff0c;为国家信息安全筑起了一道坚不可摧的防线。它的诞生&#xff0c;不仅承载…...

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片&#xff01; 番石榴病害数据集 背景描述 番石榴 &#xff08;Psidium guajava&#xff09; 是南亚的主要作物&#xff0c;尤其是在孟加拉国。它富含维生素 C 和纤维&#xff0c;支持区域经济和营养。不幸的是&#xff0c;番石榴生产受到降…...

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes环境(Mac)

在现有 Docker Desktop 环境下安装与配置独立 Kubernetes 集群环境 目标 在已安装Docker Desktop自带Kubernetes的情况下&#xff0c;搭建一个独立 Kubernetes 集群环境。配置独立的 kubectl 工具&#xff0c;使其默认管理独立的 Kubernetes 集群。保留 Docker Desktop 的 Ku…...

Linux探秘坊-------3.开发工具详解(1)

1 初识vim编辑器 创建第一个vim编辑的代码 1.新建文件 2.使用vim打开 3.打开默认是命令模式&#xff0c;写代码需要在屏幕上输出“i”字符 1.写完代码后要按Esc键退出到指令模式2.再按shift:wq即可保存并退出vim &#xff08;因为不支持鼠标&#xff0c;通常 使用键盘上的箭…...

Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解

本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis&#xff0c;涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。 一、版本兼容性说明 Spring Boot版本与Java版本对应关系 Spring Boot 2.x&#xff1a;支持Java 8、11&#xff08;推…...

白玉微瑕:闲谈 SwiftUI 过渡(Transition)动画的“口是心非”(下)

概述 秃头小码农们都知道&#xff0c;SwiftUI 不仅仅是一个静态 UI 构建框架那么简单&#xff0c;辅以海量默认或自定义的动画和过渡&#xff08;Transition&#xff09;特效&#xff0c;我们可以将 App 界面的绚丽升华到极致。 不过&#xff0c;目前 SwiftUI 中的过渡&#x…...

论文:深度可分离神经网络存内计算处理芯片

引言&#xff1a;SRAM - CIM芯片在处理深度可分离神经网络时面临的挑战 深度可分离卷积&#xff08;Depthwise separable convolution, DSC&#xff09;由逐深度卷积&#xff08;DW&#xff09;和逐点卷积&#xff08;PW)组成&#xff0c;逐深度卷积用于提取空间特征&#xff…...

hdrnet,Deep Bilateral Learning for Real-Time Image Enhancement解读

论文、代码和ppt地址&#xff1a;Deep Bilateral Learning for Real-Time Image Enhancement 论文使用的数据集&#xff1a; HDR: 这是一个复杂的摄影管道&#xff0c;包括色彩校正、自动曝光、去雾和色调映射等操作。 MIT “FiveK” 数据集: 这个数据集由 Bychkovsky 等人 提…...

Android系统开发(十五):从 60Hz 到 120Hz,多刷新率进化简史

引言 欢迎来到“帧率探索实验室”&#xff01;今天&#xff0c;我们要聊聊 Android 11 中对多种刷新率设备的支持。你可能会问&#xff1a;“这和我写代码有什么关系&#xff1f;”别急&#xff0c;高刷新率不仅仅让屏幕更顺滑&#xff0c;还会直接影响用户体验。想象一下&…...

js判断一个数组对象中是否有相同的值

let userTitleLevelList[{title:医生,code:20},{title:老师,code:21}]; 如果一个数组对象格式如上面。如果有一样的对象就提示。即&#xff1a;title和code都是一样的内容、 const hasDuplicate userTitleLevelList.some((item, index, array) > { return array.filter(…...

基于深度学习的视觉检测小项目(十五) 用户的登录界面

用户管理离不开的是消息框&#xff08;QMessageBox&#xff09;和对话框&#xff08;QDialog&#xff09;&#xff0c;比如对话框用于用户名和密码输入&#xff0c;消息框用于提示登录成功、密码错误。 • 基础知识&#xff1a;PySide6&#xff08;PyQT5&#xff09;的常用对话…...

redis-排查命中率降低问题

1.命中率降低带来的问题 高并发系统&#xff0c;当命中率低于平常的的运行情况&#xff0c;或者低于70%时&#xff0c;会产生2个影响。 有大量的请求需要查DB&#xff0c;加大DB的压力&#xff1b;影响redis自身的性能 不同的业务场景&#xff0c;阈值不一样&#xff0c;一般…...

ui文件转py程序的工具

源博客连接&#xff1a; PyCharm中利用外部工具uic转成的py文件&#xff0c;里面全是C代码&#xff0c;并非python类型的代码&#xff0c;导致大量报错。。。_pyside6-uic为什么把ui转为了c-CSDN博客 如果想把ui文件转为py文件&#xff0c;首先设置pycharm的外部工具&#xf…...

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…...

Oracle 数据库常见字段类型大全及详细解析

在工作期间会遇到数据库建表的业务&#xff0c;经常会使用复制粘帖等操作&#xff0c;而不清楚数据库的字段类型。本文记录了 Oracle 数据库常见字段类型&#xff0c;根据不同的数据需求&#xff0c;可以选择不同的字段类型来存储数据。 文章目录 一、字符类型&#xff08;Char…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

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

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

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...