Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534355
  • 博文数量: 64
  • 博客积分: 1591
  • 博客等级: 上尉
  • 技术积分: 736
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-08 14:54
文章分类

全部博文(64)

文章存档

2011年(42)

2010年(22)

分类: LINUX

2010-12-15 15:16:04

Makefile 中几种等号的用法

makefile中有四种方式对变量赋值:

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会导致循环引用。这种情况只能用+=运算符。
阅读(2938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~