Makefile 中几种等号的用法
2007-10-31 16:18
183 查看
在make中有四种方式对变量赋值:
当等号右边引用的变量(如例子中的CC)还没有被定义时,它被展开成空(nothing)而不是空格之类。
MAKE_DEPEND = $(CC) -M
...
# Some time later
CC = gcc
只要在此之前没有引用过MAKE_DEPEND就没问题。
另外,不止是“迟滞展开”,事实上每次使用该变量,等号右边的内容都会被重新展开。
1. :=运算符,如MAKE_DEPEND := $(CC) -M
这种方式叫做“简单展开”,因为在读到makefile中的这一行时等号右边就立即被展开了,等号右边引用的所有变量(如例子中的CC)也会被立即展开。其行为与一般编程和脚本语言相同。当等号右边引用的变量(如例子中的CC)还没有被定义时,它被展开成空(nothing)而不是空格之类。
2. =运算符,如MAKE_DEPEND = $(CC) -M
这种方式叫做“递归展开”,直到该变量被使用时等号右边的内容才会被展开,其实叫做“迟滞展开”更合适。神奇的是,这种展开方式可以不按顺序定义变量。比如:MAKE_DEPEND = $(CC) -M
...
# Some time later
CC = gcc
只要在此之前没有引用过MAKE_DEPEND就没问题。
另外,不止是“迟滞展开”,事实上每次使用该变量,等号右边的内容都会被重新展开。
3. ?=运算符,如OUTPUT_DIR ?= $(PROJECT_DIR)/out
这种方式叫“条件展开”,只有当OUTPUT_DIR 还没有被定义过时才进行赋值,否则什么都不做。这种方式在处理环境变量是特别有用。4. +=运算符,如OUTPUT_DIR += $(PROJECT_DIR)/out
“追加”方式。 其主要目的是给“递归展开”的变量追加内容。因为简单变量可以用simple := $(simple) new stuff的方式来追加内容;而对于递归展开的变量,recursive = $(recursive) new stuff会导致循环引用。这种情况只能用+=运算符。相关文章推荐
- Makefile 中的几种等号
- Makefile 中的几种 等号
- Makefile 中的几种 等号
- android app -- 关于listview的几种用法(复用,不复用,半复用)解决item状态改变的问题
- window.location.href和window.open的几种用法和区别
- 详解Oracle临时表的几种用法及意义
- SetTimer 几种用法(定时器)
- <C#>new几种用法
- 泛型的几种用法
- JavaScript 中 的等号(==)/不等号(!=) 和全等号(===)/非全等号(!==) 的用法
- Makefile 的基本用法
- cookies的几种用法
- 数据绑定以及Container.DataItem几种方式与用法分析
- asp.net application,session,static 几种变量生命周期及用法 收藏
- SQL中JOIN的几种常见用法
- C#的New关键字的几种用法
- Java中super的几种用法及与this的区别
- js中哈希表的几种用法总结
- replace的用法及其几种案例
- Makefile中几种赋值(= := ?= +=)