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.hqwc.cn/news/317681.html

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

相关文章

图像分割-漫水填充法 floodFill

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割-漫水填充法 floodFill (C#&#xff09;-CSDN博客 FloodFill方法是一种图像处理算法&#…

微服务注册到Zookeeper注册中心

jar包&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency>启动类上面加入&#xff1a;EnableDiscoveryClient注解 application.ym…

AI计算,为什么要用GPU?

今天这篇文章&#xff0c;我们继续来聊聊芯片。 在之前的文章里&#xff0c;小枣君说过&#xff0c;行业里通常会把半导体芯片分为数字芯片和模拟芯片。其中&#xff0c;数字芯片的市场规模占比较大&#xff0c;达到70%左右。 数字芯片&#xff0c;还可以进一步细分&#xff0…

2024年报考软考中级时间什么时候?报考软考培训多少钱?

想在2024年报考软控中级的小伙伴一定对报考软考的时间、费用等都有所疑问&#xff0c;下面我就详细为大家说明关于软考报名的相关信息。 一、2024年软考中级考试安排在几月份啊 2024年软考中级考试时间安排暂未公布&#xff0c;参考往年软考考试时间的安排&#xff0c;2024年软…

​如何把图片里背景的路人P掉?教你四种方法消除路人

在日常生活中&#xff0c;我们经常会遇到需要将图片中背景的路人P掉的情况。有时候&#xff0c;这些路人会破坏图片的整体美感&#xff0c;或者我们只想要图片中的某些元素&#xff0c;而路人的出现会分散注意力。那么&#xff0c;如何才能有效地将图片中的背景路人P掉呢&#…

【基础篇】十、JVM堆 直接内存

文章目录 一、堆1、堆heap2、堆溢出3、used、total、max4、设置堆内存大小 二、直接内存 运行时数据区域&#xff0c;还有两组成部分&#xff1a;堆和方法区&#xff0c;和栈、程序计数器不同&#xff0c;它们是线程共享的 一、堆 1、堆heap 堆内存是线程共享的创建出来的对象…

Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)

对于深度学习初学者来说&#xff0c;JupyterNoteBook的脚本运行形式显然更加友好&#xff0c;依托Python语言的跨平台特性&#xff0c;JupyterNoteBook既可以在本地线下环境运行&#xff0c;也可以在线上服务器上运行。GoogleColab作为免费GPU算力平台的执牛耳者&#xff0c;更…

数据库-MySQL 启动方式

以管理员身份运行命令行 或者Shell net start //查看所有服务 net start MYSQL80 //启动服务 net stop MYSQL80 //停止服务完整安装MySQL社区版本的 会有这个 启动服务 停止服务 重启服务

软件测试之测试用例和缺陷报告模板分享

对于测试工程师&#xff0c;必备技能之一便是测试用例的编写和软件缺陷报告的编写啦~下面提供一些模板还有项目实战样例供大家参考参考&#xff0c; 1.通过Excel表格编写测试用例 2. 缺陷报告模板 下面来个实战案例 3.在线课程作业管理系统项目测试用例&#xff08;部分&…

2023,解析新能源动力电池这一年,谁最赚钱?谁在海外最吃香?

算力说&#xff1a; 每一年都有每一年的里程碑时刻&#xff0c;每一年也都有每一年的产业高光&#xff0c;2023依然是知识点密集、变化丛生的一年&#xff0c;新能源汽车和动力电池发展之势不减&#xff0c;一路出海奔袭&#xff0c;成为高质、创新和低碳的经典范本&#xff1b…

【Unity嵌入Android原生工程】

Unity嵌入Android原生工程 本章学习,Unity模块嵌入Android## 标题Unity导出Android工程创建Android Studio工程Unity嵌入到Andorid StudioAndroid原生代码跳转到Unity场景工作需要嵌入原生工程,并实现热更,记录一下 工具,Unity2023.3.14,Android Studio 2022.3.1 patch3 Un…