makefile 变量的替换,嵌套引用,命令行变量

news2024/10/6 18:46:16

文章目录

  • 前言
  • 一、变量替换:
      • 1. 变量值的替换。
      • 2. 变量的模式替换。
      • 3. 规则中的模式替换。
  • 二、变量的嵌套使用
  • 三、命令行变量
  • 四、override ,define 关键字
  • 总结

前言


一、变量替换:

1. 变量值的替换。

使用 指定的字符(串)替换变量值中的后缀字符(串)

语法格式: $(var:a=b) 或 ${var:a=b}

  • 替换表达式中不能有任何的空格。
  • make 中支持使用 ${ } 对变量进行取值。

示例 :

src1 := a.c b.c c.c
obj1 := $(src1:c=o)

test:
	@echo "obj1 => $(obj1)"

在这里插入图片描述

2. 变量的模式替换。

使用 % 保留变量值中的指定字符,替换其他字符。

语法格式: $(var:a%b=x%y) 或 ${var:a%b=x%y}

  • 替换表达式中不能有任何空格。
  • make 中支持 使用 $ { } 对变量进行取值。

示例 :

src1 := a1b.c  a2b.c  a3b.c
obj1 := $(src1:a%b=x%y) 

test1:
	@echo "obj1 => $(obj1)"


src2 := a11b.c  a22b.c  a33b.c
obj2 := $(src2:a%b=x%y) 

test2:
	@echo "obj2 => $(obj2)"

在这里插入图片描述

3. 规则中的模式替换。

在这里插入图片描述
表示,target-patterntarget 中匹配子目标;再通过 prereq-pattern 从子目标生成依赖; 进而构成完整的规则。

流程图
在这里插入图片描述
示例 :

CC := g++							# 变量的简单赋值
TARGET := hello-makefile.out
OBJS := func.o main.o const.o

$(TARGET) : $(OBJS)
	$(CC) -o $@ $^

$(OBJS) : %.o : %.c					# 采用规则中的模式替换
	$(CC) -o $@ -c $^

.PHONY : rebuild clean all			# 声明伪目标

rebuild : clean all

all : $(TARGET)

clean :
	$(RM) *.o $(TARGET)    			# $(RM):用于删除文件的命令

在这里插入图片描述

  • 提问 : 为什莫使用 规则中的模式替换呢?

因为工程中我们的 .c .o 文件非常多。如果 想要将 .c 编译成 .o 文件时,
可以使用 这种替换方法。 直接将 文件 加在下面的 第一行后即可。

OBJS := func.o main.o const.o
$(OBJS) : %.o : %.c
$(CC) -o $@ -c $^

这样可以很快的完成编译,减少工作量。

二、变量的嵌套使用

一个变量名之 可以包含对其他变量的引用

嵌套引用的本质是使用一个变量表示另一个变量。

x := y
y := z
a := $($(x))

test :
	@echo " a => $(a)"

在这里插入图片描述
需要注意的是,在变量值的嵌套引用中,Makefile 的解析顺序是从内而外的,即先解析内部的变量,再逐级向外解析外部的变量。

三、命令行变量

在 Makefile 中,可以使用命令行变量来传递参数给 Make 命令。
命令行变量可以在命令行中通过 “-变量名=变量值” 的方式定义,并在 Makefile 中使用 $(变量名) 的方式引用。

  • 运行 make 时,在命令行定义变量
  • 命令行变量默认 覆盖 makefile 中定义的变量。
hm := hello

test :
	@echo " hm => $(hm)"		# 在命令行改变其值
	@echo " new =>$(new)"		# 打印未定义的变量,在命令行定义赋值

在这里插入图片描述

四、override ,define 关键字

  1. override 关键字:
  • 用于指示 makefile 中定义的变量不能被覆盖
  • 变量的定义和赋值都需要使用 override 关键字。
override hm := hello

test :
	@echo " hm => $(hm)"		# 在命令行改变其值

在这里插入图片描述

  1. define 关键字:
  • 用于在 makefile 中定义多行变量
  • 多行变量的定义从变量名开始 到 endef结束
  • 可使用 override 关键字防止变量被覆盖。
  • define 定义的变量等价于使用 = 定义的变量。
define fool	
I'm fool!
endef

override define cmd			  # 使用 override 防止变量被覆盖
	@echo "run cmd ls ..."
	@ls
endef

test :
	@echo "f00 => $(fool)"
	$(cmd)				# 调用 cmd 变量

在这里插入图片描述


总结

下一篇 介绍 makefile 的全局变量,文件变量,局部变量。

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

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

相关文章

ctfshow web入门 ssrf web351-355

1.web351 尝试访问本机的flag.php payload: urlhttp://localhost/flag.php urlhttp://127.0.0.1/flag.php2.web352 必须要用http或https,ip没有过滤因为匹配时没加变量,恒为真 payload: urlhttp://127.0.0.1/flag.php urlhttp://localhost/flag.php3.…

智能美妆镜兴起,如何升级更精细、智能的化妆体验!

经常化妆的小姐姐,会发现化妆除了要有好皮肤、一堆化妆品之外,化妆镜的作用也尤其重要!爱拍照的小姐姐们都知道,自拍的效果好不好,和背景、灯光有着很大的关系,其中灯光的冷调或者暖调,也是影响…

Linux网络——Shell编程之数组

Linux网络——Shell编程之数组 一、概念二、数组的定义三、Shell数组操作1. 获取数组的所有元素的列表2. 获取数组的所有元素下标3.取数组的元素个数4. 获取数组的某个元素的值5.删除数组某个元素6.删除数组7.数组切片8.数组字符替换9.数组追加元素 四、数组在函数的传参 一、概…

阿里云Intel(R) Xeon(R) Platinum处理器2.5 GHz主频

阿里云服务器CPU处理器Intel(R) Xeon(R) Platinum,2.5 GHz主频,3.2 GHz睿频,测试的云服务器ECS为通用算力型u1实例ecs.u1-c1m2.large,如下图: 阿里云服务器CPU处理器Intel(R) Xeon(R) Platinum 目前使用这款CPU处理器…

c++类和对象重要巩固练习-------日期类对象

这是对于类和对象的练习篇&#xff0c;用c来模拟完成日期计算器。 这其中需要我们完成&#xff1a; 日期 - 天数后 得到的新日期 日期 - 日期 得到相差的天数比较日期的大小等 .....具体如下头文件类中的成员函数 #pragma once #include<iostream> using namespace std…

【UE】简单实现屏幕UI定位

【UE】简单实现屏幕UI定位三维坐标方法 实现效果 屏幕空间定位 场景空间定位 一般实现兴趣点&#xff08;POI&#xff09;有两种实现方法&#xff0c;场景空间UI定位和屏幕空间UI定位。 场景空间定位&#xff1a;UI类似实例模型&#xff0c;位置和尺寸是相对于场景不变。大多…

Laravel 知识整合 1 路由

Laravel是一种基于php的MVC web开发框架 php artisan make:controller NAME//创建一个名字为name的controller路由&#xff1a;routes/web.php Route::get(/students,StudentControllerindex); 控制器&#xff1a;app/HTTP/Controllers&#xff08;可以直接用命令行生成&…

SSM框架学习-依赖注入、自动装配、暴力反射

1. 依赖注入 1.1 引用类型 注入引用类型 一种是默认按照类型装配 一种是如果有相同类型的bean采用按bean名称装配 但是在写的过程中Qualifier前面必须写上Autowired 也就是必须依赖Autowired //Autowired&#xff1a;注入引用类型&#xff0c;自动装配模式&#xff0c;默认按类…

一场面试下来,狂飙 Framework底层原理

近期有位Android 开发的朋友在吐槽说&#xff1a;现在的招聘信息网站是假的吧&#xff0c;我都怀疑一些公司的人事在冲他们的KPI&#xff0c;三个月了&#xff0c;简历投了上百份&#xff0c;结果收到回应的才个位数&#xff0c;去面试还一套Framework底层原理面试题狂炸…… 面…

178_技巧_Power BI 动态排名多项展示

178_技巧_Power BI 动态排名多项展示 一、背景 在 Power BI 中做排名矩阵时&#xff0c;我们经常遇到同一维度下&#xff0c;多项展示排名的问题。类似这样的排名矩阵&#xff0c;排名的名次不会太多&#xff0c;但是同一维度下会有多项同时展示排名&#xff0c;并且还要满足…

树结构 数据可视化

这边有个 树结构数据&#xff0c;想做一个可视化展示的需求&#xff1b;首先想到的是 python pyecharts, 一直传说 python 做数据可视化 一把梭&#xff1b; pyecharts 在线实例展示 pyecharts 官网 当看到上面的 示例 后&#xff0c;这不就我想找的嘛&#xff01;哈哈 随后 找…

web前端 --- CSS(02) -- 样式修饰

CSS本质是用来修饰HTML标签的 常用CSS属性 &#xff08;1&#xff09;字体及文本属性 文字相关效果 属性含义font字体及其属性&#xff08;复合属性&#xff0c;不建议直接使用&#xff09;font-family设置文本字体&#xff0c;电脑中存在字体font-size字体大小font-weight字…

PPT如何使用基础功能?

文章目录 0.引言1.菜单栏 0.引言 因科研办公等多场景需要进行汇报展示&#xff0c;笔者对PPT进行了学习&#xff0c;通过《PPT 2016高效办公实战应用与技巧大全666招》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对软件界面基础功能进行阐述。    1.菜单…

[光源频闪] Basler相机光源频闪设置操作说明

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

2019年下半年软件设计师下午试题

【试题四】0-1背包问题 阅读下列说明和C代码&#xff0c;回答问题1至问题3。 【说明】 0-1背包问题定义为:给定i个物品的价值v[1…i]、小重量w[1...i]和背包容量T&#xff0c;每个物品装到背包里或者不装到背包里。求最优的装包方案&#xff0c;使得所得到的价值最大。 0-1…

程序进制换算

进制数介绍 一、进制介绍 二进制 &#xff1a;0或1&#xff0c;满2进1&#xff0c;以0B或者0b开头&#xff0c;如 0b1101 八进制&#xff1a;0-7&#xff0c;满8进1&#xff0c;&#xff0c;以0开头&#xff0c;如0234 十进制&#xff1a;0-9&#xff0c;满10进1&#xff0c;…

MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage

ASP.NET MVC 里的部分视图&#xff0c;相当于 Web Form 里的 User Control。我们的页面往往会有许多重用的地方&#xff0c;可以进行封装重用。 使用部分视图有以下优点&#xff1a; 1. 可以简写代码。 2. 页面代码更加清晰、更好维护。 在视图里有多种方法可以 加载部分视图&a…

运营-10.算法分发

定义&#xff1a; 通过对信息的自动过滤和分流&#xff0c;从而实现对不同用户的个性化推荐 算法分发三要素 算法的前提 算法分发的前提&#xff1a;了解用户的喜好&#xff0c;给用户做画像。 用户画像是根据用户 基本属性 、 社会属性 、 行为属性 和 消费属性 等真实数 据信…

流式作业如何保证真正的精准一次消费

checkpoint 两阶段提交和WAL 真的是神&#xff01;&#xff01;&#xff01;&#xff01; 彻底解决了重复消费问题!! 状态一致性 当在分布式系统中引入状态时&#xff0c;自然也引入了一致性问题。一致性实际上是"正确性级别"的另一种说法&#xff0c;也就是说在成功…

【美化命令行教程】

目录 下载字体打开Teminal设置 美化powershell注意&#xff1a;主题路径powershell 自动提示看效果 美化git看效果 下载字体 防止乱码一定要下载下面的字体并安装 下载作者推荐MesloLGM NF字体&#xff0c;点此下载 打开Teminal设置 修改Teminal配置文件json "font&q…