Makefile 中的 "="、":="、"?="、"+="
--------
= 最基本的賦值
:= 覆蓋之前的值
?= 如果沒有被賦值過就賦予等號後面的值
+= 添加等號後面的值
-------
eg:
1、Makefile文件內容:
cat Makefile.equal
ifdef DEFINE_VER
VER = "Hello World!"
endif
ifeq ($(OPT),define)
VER ?= "Hello World! First!"
endif
ifeq ($(OPT),add)
VER += "Kelly!"
endif
ifeq ($(OPT),recover)
VER := "Hello World! Again!"
endif
all:
@echo $(VER)
2、使用腳本來運行Makefile,
cat execute.sh
#!/bin/sh
set -v /* 設置運行時顯示相應shell命令 */
make -f Makefile.equal DEFINE_VER=true
make -f Makefile.equal DEFINE_VER=true OPT=define
make -f Makefile.equal DEFINE_VER=true OPT=add
make -f Makefile.equal DEFINE_VER=true OPT=recover
make -f Makefile.equal
make -f Makefile.equal OPT=define
make -f Makefile.equal OPT=add
make -f Makefile.equal OPT=recover
3、運行腳本文件,
./execute.sh
make -f Makefile.equal DEFINE_VER=true
Hello World!
make -f Makefile.equal DEFINE_VER=true OPT=define
Hello World!
make -f Makefile.equal DEFINE_VER=true OPT=add
Hello World! Kelly!
make -f Makefile.equal DEFINE_VER=true OPT=recover
Hello World! Again!
make -f Makefile.equal
make -f Makefile.equal OPT=define
Hello World! First!
make -f Makefile.equal OPT=add
Kelly!
make -f Makefile.equal OPT=recover
Hello World! Again!
--------------------------
"=" : make將整個Makefile 展開後,再決定變量的值。
eg:
x = foo
y = $(x) bar
x = xyz
最終 y 的值 xyz bar 。
--------------------------
":=" 變量的值決定於它在Makefile中的位置,而不是整個Makefile展開後的最終值。
eg:
x := foo
y := $(x) bar
x := xyz
最終y 的值 foo bar 。