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 。

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