1. 程式人生 > >makefile中的冒號和等號解析

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))