在makefile中,對變數的賦值,有好幾種方式,它們的意義、使用的場合都各不相同,初學者往往比較迷惑。這裡對它們的用法簡要介紹一下。
=遞迴展開賦值,這是預設的賦值方式。makefile是兩遍解析的,若乙個變數引用另外乙個變數,兩個變數定義的位置,誰在前誰在後沒有任何關係,都能達到同樣的效果。如:
subarch=arm
arch = $(subarch)
all:
@echo $(arch)
輸出:
arm
而
arch = $(subarch)
subarch=arm
all:
@echo $(arch)
也輸出:
arm
?=:如果沒有初始化該變數,就給它賦上預設值。如:
arch ?= i386
all:
@echo $(arch)
輸出:arm而
all:
@echo $(arch)
輸出:i386
:=直接賦值,不會遞迴展開,若引用的變數不存在,就展開為空串。如:
subarch=arm
arch = $(subarch)
all:
@echo $(arch)
輸出:
arm
而
arch = $(subarch)
subarch=arm
all:
@echo $(arch)
輸出:
(
空串)
Makefile中幾種賦值( )
變數的引用方式 變數名 或者 例如 就是取變數objs的值 注意 當變數名為單字元是可以採用 a 的方式引用,多字元則不行 var a abc var b var a 222 var c var a var a def var b的值會改變為def,而var c的值還是為abc var a var ...
makefile中的變數賦值
在makefile中賦值方式有 和 a a b b b all echo a 執行結果 echo a b a b 這種賦值方式是沒有先後順序的,但是這種賦值方式可能會出現問題,例如遞迴定義時 a a a a b b b all echo a 執行結果 echo a a 這種賦值方式有先後順序,只能使...
makefile中 賦值區別
在makefile中我們經常看到 這幾個賦值運算子,那麼他們有什麼區別呢?我們來做個簡單的實驗 新建乙個makefile,內容為 ifdef define vre vre hello world else endif ifeq opt define vre hello world first end...