Makefile的賦值運算符(=, :=, +=, ?=)
Makefile的賦值運算符(=, :=, +=, ?=)
總結:
= 是最基本的賦值
:= 會覆蓋變數之前的值
?= 變數為空時才給值,不然則維持之前的值
+= 將值附加到變數的後面
另外 =, :=這兩賦值運算符號在網路上查詢,常常會看到這種說法:
= 在執行時擴展(values within it are recursively expanded when the variable is used, not when it's declared)
:= 在定義時擴展(values within it are expanded at declaration time)
而白話一點的說法如下範例所示
1. =
make會將整個makefile展開後,才決定變數的值。也就是说,變數的值會是整個Makefile中最後被指定的值。看例子:
x = hello
y = $(x) world!
x = hi
all:
@echo $(y)
在上例中,輸出結果將會是 hi world! ,而不是 hello world!
2. :=
變數的值在Makefile展開途中就會被給定,而不是整個Makefile展開後的最终值。
x := hello
y := $(x) world!
x := hi
all:
@echo $(y)
輸出結果 ====> hello world!
總結:
= 是最基本的賦值
:= 會覆蓋變數之前的值
?= 變數為空時才給值,不然則維持之前的值
+= 將值附加到變數的後面
另外 =, :=這兩賦值運算符號在網路上查詢,常常會看到這種說法:
= 在執行時擴展(values within it are recursively expanded when the variable is used, not when it's declared)
:= 在定義時擴展(values within it are expanded at declaration time)
而白話一點的說法如下範例所示
1. =
make會將整個makefile展開後,才決定變數的值。也就是说,變數的值會是整個Makefile中最後被指定的值。看例子:
x = hello
y = $(x) world!
x = hi
all:
@echo $(y)
在上例中,輸出結果將會是 hi world! ,而不是 hello world!
2. :=
變數的值在Makefile展開途中就會被給定,而不是整個Makefile展開後的最终值。
x := hello
y := $(x) world!
x := hi
all:
@echo $(y)
輸出結果 ====> hello world!
留言
張貼留言