makefile 變量展開


Makefile中給變量賦值:
=     是遞歸展開式變量

          value1 = 5

          value2 = $(value1)

          value1 = 6

          最終$(value2)就變成了6

:=    是直接展開式變量

          value1 := 5

          value2 := $(value1)

          value1 :=6

         最終$(value2)是5
 
 
GUN make的執行過程分為兩個階段。

第一階段:讀取所有的makefile文件(包括“MAKEFILES”變量指定的、指示符“include“指定的、以及命令行選項“-f(--file)“指定的makefile文件),內建所有的變量、明確規則和隱含規則,並建立所有目標和依賴之間關系結構鏈表。

第二階段:根據第一階段已經建立的依賴關系結構鏈表決定哪些目標需要更新,並使用對應的規則來重建這些目標。


1.在make執行的第一階段如果變量和函數被展開,那么稱此展開是“立即“的,其他的展開稱之為“延后“的。

2.變量定義解析規則如下:

IMMEDIATE=DEFERRED
IMMEDIATE?=DEFERRED
IMMEDIATE:=IMMEDIATE
IMMEDIATE+=DEFERRED or IMMEDIATE
define IMMEDIATE
        DEFERRED
Endef

當變量使用追加符(+=)時,如果此前這個變量是一個簡單變量(使用:=定義的)則認為它是立即展開的,其他情況時都被認為是“延后“展開的變量。

3.所有使用到條件語句在產生分支的地方,make程序會根據預設條件將正確的分支展開。即條件分支的展開是“立即“的。其中包括:“ifdef”、“ifeq“、”ifndef“和“ifneq“所確定的所有分支命令

4.所有的規則在make執行時,都按照如下的模式展開:

IMMEDIATE:IMMEDIATE;DEFERRED
        DEFERRED


注:上面的IMMEDIATE表示立即展開,DEFERRED表示延后展開


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM