在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就没问题。
另外,不止是 “迟滞展开”,事实上每次使用该变量,等号右边的内容都会被重新展开。