makefile中的冒号和等号解析

Makefile里的=显然是赋值的用法


风格1: 递归扩展变量
(recursively expanded variable)
变量定义格式是,变量和值之间用等号,即 =
例如:
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:;echo $(foo)

将显示 Huh?
再例如:
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
缺点是不能这么定义:CFLAGS = $(CFLAGS) -O ,将会死循环

风格2: 简单扩展变量
(simply expanded variables)
变量定义格式是,变量和值之间用冒号等号,即 :=
例如
x := foo
y := $(x) bar
x := later
等价于:
y := foo bar
x := later
另外 ?= 含义为:没有定义则赋值
FOO ?= bar
等价于
ifeq ($(origin FOO), undefined)
FOO = bar
endif
+= 是为变量后面追加字符

变量替换
$(var:a=b),是将 var 变量中每一个单词后面的 a 替换为 b
$(var:suffix=replacement)
等价于
$(patsubst %suffix,%replacement,$(var))
$(foo:%.o=%.c) ,由于出现了 %, 其功能和 patsubst 等价

$(var:pattern=replacement)
等价于
$(patsubst pattern,replacement,$(var))


你可能感兴趣的:(扩展,include,makefile,variables)