Makefile中的幾種賦值方式

2021-08-22 01:46:57 字數 1588 閱讀 5852

在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...