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 。