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变量使用相关推荐

  1. Makefile_04:Makefile变量初了解

    Makefile变量初了解 在上一篇文章<Makefile_03:Makefile介绍>我们可以看到[.o]文件的字符串被重复了两次,如果我们的工程需要加入一个新的[.o] 文件,如果 m ...

  2. makefile 学习笔记 二:makefile变量

    一.变量定义语法 变量的名称 = 值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成. 等号左右的空白符没有明确的要求,因为在执行 make 的时候多余的空白符会被自动的删除. 至于值列表,既 ...

  3. 【 Makefile 编程基础之三】详解 Makefile 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ☞ ...

  4. makefile变量赋值

    在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值. 先看第一种方式,也就是简单的使用"="号,在"=" ...

  5. Makefile变量

    自定义变量 = 是最基本的赋值,会把整个makefile展开之后再决定是多少 x=foo y=$(x)bar #y是asdbar,不是foobar x=asd := 是覆盖之前的值,和=不同,和赋值的 ...

  6. Makefile中的变量和shell变量

    我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节.让我们从一个简单的makefile来看看. 注意makefile中一定要有一个目标,且一定 ...

  7. makefile中变量有哪些?

    make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...

  8. GNU make 和 makefile

    GNU make 和 makefile 1.9.1?GNU make 在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入 gcc 命令进行编译的话,则会 非常不方便.因此,人们通常利用 ...

  9. 从命令行传递其他变量来制作

    我可以将变量作为命令行参数传递给GNU Makefile吗? 换句话说,我想传递一些最终会成为Makefile变量的参数. #1楼 如果你创建一个名为Makefile的文件并添加一个像$(unitte ...

最新文章

  1. AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)
  2. content-type的作用
  3. 为SAP Analytics Cloud的story创建持久化页面
  4. 打破场景边界,PDFlux助你多领域表格提取
  5. 小白学Python——Anaconda安装
  6. 如何在SQL Server中的SELECT TOP 中使用变量
  7. JAVA中list的循环遍历,详解Java中list,set,map的遍历与增强for循环
  8. java obj1 = obj2_无障碍assertEquals(Object obj1,Object obj2),想怎么比较就怎么比较!! [ 光影人像 东海陈光剑 的博客 ]...
  9. #define、typedef与const
  10. BPS数据包常见问题
  11. FFmpeg实现音视频同步的精准片段拼接
  12. python笔记:python中 | ^表示什么意思
  13. java生成xsd_如何使用Java代码生成XSD文件?
  14. IDEA开发及运行第一个Android项目
  15. 《小岛经济学》读书笔记
  16. SVN clean up报错
  17. 获取素材列表返回40004 invalid media type !(大坑)解决办法
  18. 算法设计与分析-习题-用生成函数求解递归方程f(n)=2f(n/2)+cn,f(1)=0
  19. 在网上买中国工商银行基金
  20. 《平安夜》钢琴谱上的虚线表示什么?

热门文章

  1. 内容理解在新浪微博广告中的应用
  2. 1782. Travel
  3. 3d建模自学难吗?难点在哪儿?
  4. java 打印gc_输出Java的GC信息
  5. 30行代码-使用预训练模型实现中英文翻译
  6. ACM-奋斗的小蜗牛
  7. 电商项目需求整理和分析
  8. 【DWR系列01】-DWR简介及入门例子
  9. java的smalltalk规则_Smalltalk 入门学习
  10. linux ping大包指令,linux下ping命令使用详解,