Makefile 中的 "="、":="、"?="、"+="

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 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章