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

2026年Magento独立站中国商家收单支付平台综合评估

2026年&#xff0c;全球收单市场持续分化。监管门槛抬升使支付牌照成为稀缺资源&#xff0c;资金周转效率从“加分项”变为“必选项”。对于使用Magento搭建独立站的中国商家&#xff0c;收单平台的选择已从单一的费率比较&#xff0c;升级为对合规深度、资金效率、本地化能力的…...

PADS VX2.8 极坐标布局技巧:圆形灯板LED高效排列指南

1. 极坐标布局在圆形灯板设计中的核心价值 第一次接触圆形LED灯板设计时&#xff0c;我被密密麻麻的元件排列搞得头晕眼花。传统直角坐标系下&#xff0c;要精确控制每个LED灯珠的间距和角度&#xff0c;需要反复计算XY坐标&#xff0c;效率极低。直到发现PADS VX2.8的极坐标功…...

为什么选择Apache NetBeans?完整对比主流IDE的优势与特色

为什么选择Apache NetBeans&#xff1f;完整对比主流IDE的优势与特色 【免费下载链接】netbeans Apache NetBeans 项目地址: https://gitcode.com/gh_mirrors/ne/netbeans Apache NetBeans是一款由Apache软件基金会开发的开源集成开发环境&#xff08;IDE&#xff09;&a…...

SAP销售订单BAPI调用避坑指南:手把手教你处理增强字段、合作伙伴与定价(附完整ABAP代码)

SAP销售订单BAPI实战&#xff1a;增强字段、合作伙伴与定价的深度解决方案 当你第一次调用SD_SALESDOCUMENT_CREATE创建销售订单时&#xff0c;可能会遇到这样的场景&#xff1a;订单看似创建成功&#xff0c;但增强字段没值、合作伙伴角色错乱、定价条件未生效。这种"表…...

从零构建极简大语言模型:MiniLLMDemo 原理与实现详解

一、项目背景与核心价值 在LLM技术快速迭代的今天&#xff0c;理解底层原理比调用API更重要。本文将带您用200行代码实现一个可运行的极简大模型MiniLLMDemo&#xff0c;通过代码与原理的深度结合&#xff0c;掌握Transformer架构的核心设计思想。二、完整代码实现 import torc…...

终极指南:3分钟快速掌握Logisim-evolution数字电路设计与仿真

终极指南&#xff1a;3分钟快速掌握Logisim-evolution数字电路设计与仿真 【免费下载链接】logisim-evolution Digital logic design tool and simulator 项目地址: https://gitcode.com/gh_mirrors/lo/logisim-evolution 想要学习数字电路设计却不知从何开始&#xff1…...

LAV Filters完整教程:如何让Windows播放器支持所有视频格式

LAV Filters完整教程&#xff1a;如何让Windows播放器支持所有视频格式 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于ffmpeg的开源Di…...

终极指南:如何用BallonTranslator快速完成漫画翻译?

终极指南&#xff1a;如何用BallonTranslator快速完成漫画翻译&#xff1f; 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址…...

如何统计不同电话号码的个数?—位图法

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

告别慢查询:用快马ai智能生成postgresql性能优化与索引方案

告别慢查询&#xff1a;用快马AI智能生成PostgreSQL性能优化与索引方案 在电商系统中&#xff0c;订单查询是最常见的操作之一。随着业务量的增长&#xff0c;数据库查询性能往往会成为瓶颈。最近我在优化一个电商平台的订单查询模块时&#xff0c;发现几个典型的性能问题&…...