CMake入门教程【核心篇】宏模板(macro)

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

    • 1. 定义宏
      • 1.1 基本语法
      • 1.2 示例
    • 2. 调用宏
      • 2.1 调用语法
      • 2.2 示例
    • 3. 参数传递
      • 3.1 示例
    • 4. 模拟宏的返回值
      • 4.1 示例
    • 5. 宏的作用域
      • 5.1 示例
    • 6.macro使用技巧
    • 结论

在本文中,我们将深入探讨CMake中宏的使用方法及其技巧,以简化CMakeLists.txt文件的编写和维护。

1. 定义宏

在CMake中,使用macro关键字定义宏。宏可以包含一系列的CMake指令,用于执行重复的任务。

1.1 基本语法

macro(<macro_name> [arg1 [arg2 ...]])# 宏的内容
endmacro()

1.2 示例

定义一个名为print_message的宏,用于打印一条消息:

macro(print_message message)message(STATUS "Message: ${message}")
endmacro()

2. 调用宏

调用宏时,使用宏的名称并传入相应的参数。

2.1 调用语法

在CMake中,调用宏的语法如下:

<macro_name>([arg1 [arg2 ...]])

2.2 示例

调用print_message宏:

print_message("Hello, CMake!")

3. 参数传递

宏支持参数传递。在宏定义时指定参数名,在调用时传递相应的实际参数值。

3.1 示例

定义一个名为print_sum的宏,计算两个数的和:

macro(print_sum a b)math(EXPR sum "${a} + ${b}")message(STATUS "Sum: ${sum}")
endmacro()

调用print_sum宏:

print_sum(3 5)

4. 模拟宏的返回值

虽然CMake宏没有返回值的概念,但可以通过设置变量来模拟返回值。

4.1 示例

定义add_numbers宏,计算两个数的和,并将结果保存在变量中:

macro(add_numbers a b result_var)math(EXPR sum "${a} + ${b}")set(${result_var} ${sum} PARENT_SCOPE)
endmacro()

调用add_numbers宏:

set(my_result)
add_numbers(3 5 my_result)
message(STATUS "Result: ${my_result}")

5. 宏的作用域

宏内部定义的变量默认是局部的。使用PARENT_SCOPE选项可以将变量提升到父级作用域。

5.1 示例

定义set_global_variable宏,设置一个全局变量:

macro(set_global_variable var_name var_value)set(${var_name} ${var_value} PARENT_SCOPE)
endmacro()

调用set_global_variable宏:

set_global_variable(my_var "Hello, CMake!")
message(STATUS "Global variable: ${my_var}")

6.macro使用技巧

定义
调用
作用域管理
与函数比较
复用宏
参数处理
macro(name args)
name(values)
宏内变量
宏无独立作用域
封装常用逻辑
可变参数列表
宏的使用
宏的定义
宏的调用
变量作用域
宏与函数的区别
宏的复用
参数处理
逻辑实现
执行宏逻辑
set(variable value PARENT_SCOPE)
函数有独立作用域
简化脚本
使用ARGN

结论

CMake宏是一种强大的工具,可以有效地简化和重用CMake代码。通过理解宏的基本用法、参数传递、返回值模拟以及作用域管理,你可以提高CMakeLists.txt文件的可维护性和可读性。正确使用宏将有助于提高项目构建过程的效率和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二分查找(一)

算法原理 原理&#xff1a;当一个序列有“二段性”的时候&#xff0c;就可以使用二分查找算法。 适用范围&#xff1a;根据规律找一个点&#xff0c;能将这个数组分成两部分&#xff0c;根据规律能有选择性的舍去一部分&#xff0c;进而在另一个部分继续查找。 除了最普通的…

Ps:创建基于颜色的蒙版

有时候画面上的某种颜色显得不是很和谐&#xff0c;如下图所示。 将画面上的某种颜色换掉&#xff0c;也是得到创意效果的一种重要手段。 演示视频 如果能创建好相关颜色的蒙版&#xff0c;这样在替换颜色的时候就会更加方便。 ◆ ◆ ◆ 创建基于颜色的蒙版 主要思路&#xf…

【动态规划】C++算法:44 通配符匹配

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode44 通配符匹配 给你一个输入字符串 (s) 和一个字符模式 &#xff0c;请你实现一个支持 ‘?’ 和 ‘’ 匹配规则的通配符匹配&#xff1a; ‘?’ 可以匹配任何单个字符。 ’ 可以匹配…

122基于matlab的CSO-SVM,BA-SVM模式识别模型

基于matlab的CSO-SVM&#xff0c;BA-SVM模式识别模型。优化SVM的两个参数晚上最佳参数确定。输出分类识别结果和准确率。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 122鸡群优化算法蝙蝠优化算法 (xiaohongshu.com)

Unity | Shader基础知识番外(向量数学知识速成)

目录 一、向量定义 二、计算向量 三、向量的加法&#xff08;连续行走&#xff09; 四、向量的长度 五、单位向量 六、向量的点积 1 计算 2 作用 七、向量的叉乘 1 承上启下 2 叉乘结论 3 叉乘的计算&#xff08;这里看不懂就百度叉乘计算&#xff09; 八、欢迎收…

78 Python开发-多线程FuzzWaf异或免杀爆破

这里写目录标题 本课知识点:学习目的:演示案例:Python开发-简单多线程技术实现脚本Python开发-利用FTP模块实现协议爆破脚本Python开发-配合Fuzz实现免杀异或Shell脚本 涉及资源: 本课知识点: 协议模块使用&#xff0c;Request爬虫技术&#xff0c;简易多线程技术&#xff0c;…

探索模块化神经网络在现代人工智能中的功效和应用

一、介绍 在快速发展的人工智能领域&#xff0c;模块化神经网络 (MNN) 已成为一项关键创新。与遵循整体方法的传统神经网络架构不同&#xff0c;MNN 采用分散式结构。本文深入探讨了 MNN 的基础知识、它们的优势、应用以及它们带来的挑战。 evertongomede 在人工智能领域&#…

通灵术揭秘:空碗“竖筷子”不倒

通灵术揭秘&#xff1a;空碗“竖筷子”不倒 释名&#xff1a;竖筷子是流传很广的一种民间小术&#xff0c;因其法是在碗中竖起一支或三支筷子&#xff0c;故名。 用处&#xff1a;如果有人莫名其妙的生病了&#xff0c;医药无效&#xff0c;按民间的说法&#xff0c;就是遇鬼了…

苹果cmsV10暗黑大气MT主题模板源码-只有PC版本

苹果cms MT主题是一款多功能苹果cmsV10暗黑大气主题 初次使用说明&#xff1a; 网站模板选择mt 模板目录填写html 后台地址&#xff1a;MT主题,mt/mtset 先应用主题打开前台&#xff0c;再点击后台。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725…

Python武器库开发-武器库篇之代理池配置(四十)

武器库篇之代理池配置(四十) 我们在渗透的过程中&#xff0c;是必须要挂代理的&#xff0c;相信为何要挂代理的原因&#xff0c;各位也是非常的明白的&#xff0c;这里就不多讲了。关于如何挂代理和购买代理大家可以去看内网隧道代理技术&#xff08;十&#xff09;之公网资产…

GitHub上的15000个Go模块存储库易受劫持攻击

内容概要&#xff1a; 目前研究发现&#xff0c;GitHub上超过15000个Go模块存储库容易受到一种名为“重新劫持”的攻击。 由于GitHub用户名的更改会造成9000多个存储库容易被重新劫持&#xff0c;同时因为帐户删除&#xff0c;会对6000多个存储库造成重新劫持的危机。目前统计…

华芯微特|MCU之TIMER输入捕获

引言 华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别&#xff0c;为了让您更加简单的使用这一功能&#xff0c;下面小编将以SWM190为例&#xff0c;我们今天详细讲解一下TIMER的输入捕获功能。 TIMER输入捕获 一、TIMER定时器之输入捕获功能 我们今天详细讲解一下…

产品|燕窝中的“秘密武器”——燕窝酸

前言 当提及燕窝&#xff0c;大部分人脑海中首先会闪过的大概是“宫廷圣品”、“名贵补品”等听上去十分高大上的形容词。然而随着现代人们生活水平的提高&#xff0c;燕窝已不再神秘&#xff0c;逐渐成为寻常百姓餐桌上的常见食品之一。据我国中医记载&#xff0c;燕窝具有养…

项目框架构建之2:主机程序的搭建

本文是“项目框架构建”系列之2&#xff0c;要编写一个项目框架&#xff0c;就好像一个操作系统似的&#xff0c;得有一些东西可以搭载项目结构&#xff0c;而.net core的主机框架正是可以实现这一目的的好帮手。 简单介绍一下主机程序&#xff0c;我们生产系统中往往需要构建…

redis复习笔记02(小滴课堂)

分布式缓存Redis6常见核心配置讲解 查看配置文件&#xff1a; 创建配置文件&#xff1a; 配置完我们去验证一下&#xff1a; 启动成功就没有问题了。 可以看到redis日志。 然后我们就可以连接我们的redis了&#xff1a; 设置了密码就需要密码登录了。 如果登录了错误的密码也无…

12月,全国各地电子签推广应用政策汇总

12月&#xff0c;国务院及各地政府办公厅、市监局、住建委等机关部门&#xff0c;持续推动电子印章、电子合同等功能在“政府采购、工程项目审批、企业开办等”领域深化应用&#xff0c;加快实现电子签章互信互认&#xff0c;不断简化办事流程&#xff0c;让越来越多高频常办事…

关于几何建模内核

几何建模内核是用于提供计算机辅助设计 (CAD) 软件中的 3D 建模功能的软件组件。它用于设计虚拟模型以为真实对象的仿真和制造提供支持。几何建模内核使用各种不同的几何表示形式来表示真实对象。这些模型包括使用三角形表面网格粗略估计对象的小平面模型&#xff0c;以及使用在…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的&#xff0c;涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展&#xff0c;边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带&#xff0c;边…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

DHTMLX Spreadsheet v5.1.1 Crack

DHTMLX Spreadsheet 5.1 具有新主题、简化的数字格式本地化、与框架的实时集成演示等 推出 DHTMLX Spreadsheet v5.1。新版本提供了一组有用的功能&#xff0c;这对开发人员和最终用户都有吸引力。 首先&#xff0c;新的电子表格版本提供了 4 个内置主题&#xff0c;可以根据您…