Makefile变量使用
1、变量使用概述
变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”
符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”
字符,那么你需要用“$$”
来表示。变量可以使用在许多地方,如规则中的“目标”、“依赖”、“命令”以及新的变量中。
2、“=”、“:=”与“?=”区别
2.1 “=”操作符
在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处;也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值。如:
foo = $(bar)
bar = $(ugh)
ugh = Huh?all:
echo $(foo)
我们执行“make all”将会打出变量$(foo)
的值是“Huh?”( $(foo)
的值是$(bar)
,$(bar)
的值是$(ugh)
,$(ugh)
的值是“Huh?”)可见,变量是可以使用后面的变量来定义的。
2.2 “:=”操作符
这种方法可以区别于“=”操作符的是前面的变量不能使用后面的变量,只能使用前面已定义好了的变量;如:
y := $(x) bar
x := foo
那么,y的值是“bar”,而不是“foo bar”。
2.3 “?=”操作符
FOO ?= bar
其含义是,如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做,其等价于:
ifeq ($(origin FOO), undefined)
FOO = bar
endif
3、变量的高级用法
3.1 变量值的替换
3.1.1结尾替换
foo := a.o b.o c.o
bar := $(foo:.o=.c)
这个示例中,我们先定义了一个“$(foo)”
变量,而第二行的意思是把“$(foo)”
中所有以“.o”字串“结尾”全部替换成“.c”,所以我们的“$(bar)”
的值就是“a.c b.c c.c”。
3.1.2 “静态模式”变量替换
foo := a.o b.o c.o
bar := $(foo:%.o=%.c)
这依赖于被替换字串中的有相同的模式,模式中必须包含一个“%”字符,这个例子同样让$(bar)变量的值为“a.c b.c c.c”。
3.2 嵌套变量
x = y
y = z
a := $($(x))
在这个例子中,$(x)
的值是“y”,所以$($(x))
就是$(y)
,于是$(a)
的值就是“z”。(注意,是“x=y”,而不是“x=$(y)”)。
4、追加变量值
objects = main.o foo.o bar.o utils.o
objects += another.o
于是,我们的$(objects)值变成:“main.o foo.o bar.o utils.o another.o”(another.o被追加进去了)。
5、总结
此处列举了变量的简单使用,下一次将介绍Makefile的函数使用。谢谢!
Makefile变量使用相关推荐
- Makefile_04:Makefile变量初了解
Makefile变量初了解 在上一篇文章<Makefile_03:Makefile介绍>我们可以看到[.o]文件的字符串被重复了两次,如果我们的工程需要加入一个新的[.o] 文件,如果 m ...
- makefile 学习笔记 二:makefile变量
一.变量定义语法 变量的名称 = 值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成. 等号左右的空白符没有明确的要求,因为在执行 make 的时候多余的空白符会被自动的删除. 至于值列表,既 ...
- 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ☞ ...
- makefile变量赋值
在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值. 先看第一种方式,也就是简单的使用"="号,在"=" ...
- Makefile变量
自定义变量 = 是最基本的赋值,会把整个makefile展开之后再决定是多少 x=foo y=$(x)bar #y是asdbar,不是foobar x=asd := 是覆盖之前的值,和=不同,和赋值的 ...
- Makefile中的变量和shell变量
我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节.让我们从一个简单的makefile来看看. 注意makefile中一定要有一个目标,且一定 ...
- makefile中变量有哪些?
make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...
- GNU make 和 makefile
GNU make 和 makefile 1.9.1?GNU make 在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入 gcc 命令进行编译的话,则会 非常不方便.因此,人们通常利用 ...
- 从命令行传递其他变量来制作
我可以将变量作为命令行参数传递给GNU Makefile吗? 换句话说,我想传递一些最终会成为Makefile变量的参数. #1楼 如果你创建一个名为Makefile的文件并添加一个像$(unitte ...
最新文章
- AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)
- content-type的作用
- 为SAP Analytics Cloud的story创建持久化页面
- 打破场景边界,PDFlux助你多领域表格提取
- 小白学Python——Anaconda安装
- 如何在SQL Server中的SELECT TOP 中使用变量
- JAVA中list的循环遍历,详解Java中list,set,map的遍历与增强for循环
- java obj1 = obj2_无障碍assertEquals(Object obj1,Object obj2),想怎么比较就怎么比较!! [ 光影人像 东海陈光剑 的博客 ]...
- #define、typedef与const
- BPS数据包常见问题
- FFmpeg实现音视频同步的精准片段拼接
- python笔记:python中 | ^表示什么意思
- java生成xsd_如何使用Java代码生成XSD文件?
- IDEA开发及运行第一个Android项目
- 《小岛经济学》读书笔记
- SVN clean up报错
- 获取素材列表返回40004 invalid media type !(大坑)解决办法
- 算法设计与分析-习题-用生成函数求解递归方程f(n)=2f(n/2)+cn,f(1)=0
- 在网上买中国工商银行基金
- 《平安夜》钢琴谱上的虚线表示什么?