makefile专题(变量的高级主题(上))
关键词:变量值的替换:$(var:a=b)
或${var:a=b}
、变量的模式替换:$(var:a%b=x%y)
或${var:a%b=x%y}
、变量值的嵌套引用、 命令行变量、override
关键字、define
关键字
1.变量值的替换
- 使用指定字符(串)替换变量值中的后缀字符(串)
- 语法格式:
$(var:a=b)
或${var:a=b}
表达式中不能有任何的空格
make中支持使用${}
对变量进行取值
文章图片
- 使用%保留变量值中的指定字符,替换其它字符
- 语法格式:
$(var:a%b=x%y)
或${var:a%b=x%y}
表达式中不能有任何的空格
make中支持使用${}
对变量进行取值
文章图片
- 规则中的模式替换
文章图片
通过target-pattern
从targets
中匹配子目标,再通过prereq-pattern
从子目标生成依赖,进而构成完整的规则 - 规则中模式替换示例
文章图片
CC := gcc
TARGET := hello.out
OBJS := func.o main.o const.o$(TARGET) : $(OBJS)
$(CC) -o $@ $^# 规则中的模式匹配
$(OBJS) : %.o : %.c
$(CC) -o $@ -c $^.PHONY : cleanrebuildallrebuild : clean all all : $(TARGET)clean :
$(RM) *.o $(TARGET)
3. 变量值的嵌套引用
- 一个变量名之中可以包含对其它变量的引用
- 嵌套引用的本质:使用一个变量表示另一个变量
文章图片
x := y
y := z
a := $($(x))test1 :
echo "$(a)"
输出结果:
$ make test1
echo "z"
z
4. 命令行变量(一般在测试版本中使用)
- 运行make时,在命令行定义变量
- 命令行变量默认覆盖makefile中定义的变量
文章图片
hm := hello makefiletest :
echo "hm => $(hm)"
输出结果:
$ make test hm:=cmd
echo "hm => cmd"
hm => cmd
5.
override
关键字- 用于指示makefile中定义的变量不能被覆盖
- 变量的定义和赋值都需要使用
override
关键字
文章图片
override hm := hello makefiletest :
echo "hm => $(hm)"
输出结果:
$ make test hm:=cmd
echo "hm => hello makefile"
hm => hello makefile
6.
define
关键字- 用于在makefile中定义多行变量
- 多行变量的定义从变量名开始到
endef
结束 - 可以使用
override
关键字防止变量被覆盖 -
define
定义的变量等价于使用=
定义的变量
文章图片
- 变量值的替换:
$(var:a=b)
或${var:a=b}
- 变量的模式替换:
$(var:a%b=x%y)
或${var:a%b=x%y}
- makefile支持将模式替换可以直接用于规则中
- makefile中的变量值能够嵌套引用
- 命令行中定义的变量能够覆盖makefile中定义的变量
-
override
关键字用于指示makefile中定义的变量不能被覆盖 -
define
关键字用于在makefile中定义多行变量
【makefile专题(变量的高级主题(上))】声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所
推荐阅读
- Shell-Bash变量与运算符
- (二)ES6第一节变量(let|(二)ES6第一节变量(let,const)
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- 为什么文章被4个专题收录了阅读量却是个位数()
- 【专题】怎样才能消除妊娠纹
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- 诗专题/秋花迎月
- linux环境变量相关操作
- 部署专题集合
- 【课程-Perl】Lesson|【课程-Perl】Lesson 2: 值与变量