make解析Makefile的過程
阿新 • • 發佈:2021-01-06
一、make的執行過程
第一階段:讀取所有的makefile檔案(包括“MAKEFILES”變數指定的、指示符“include”指定的、以及命令列選項“-f(–file)”指定的makefile檔案),
內建所有的變數、明確規則和隱含規則,並建立所有目標和依賴之間的依賴關係結構連結串列。
第二階段:根據第一階段已經建立的依賴關係結構連結串列決定哪些目標需要更新,並使用對應的規則來重新建這些目標。
【注】在make執行的第一階段中如果變數和函式被展開,那麼稱此展開是“立即”的,此時所有的變數和函式被展開在需要構建的結構連結串列的對應規則中(此規則在建立連結串列是需要使用)。其它的展開稱之為“延後”的。
二、條件語句
所有使用到條件語句在產生分支的地方,make程式會依據預設的條件將正確的分支展開。條件分支的展開是立即的。包括:“ifdef”、“ifeq”、“ifndef”、“ifneq”所確定的所以分支語句。
三、變數的取值規則
- =、?=、:=、+=的規則
=基本賦值
?=左值之前沒有被賦予過值,執行賦值
:=覆蓋之前的賦值
+=追加賦予等於號後面的值
makefile -demoe
ifdef HELLO
VALUE= "Hello!"
else
endif
ifeq ($(COMMAND),define)
VALUE ?= "VALUE沒有被賦值過就賦予等號後面的值"
endif
ifeq ($(COMMAND),add)
VALUE += "Word! 追加=號後面的值"
endif
ifeq ($(COMMAND),recover)
VALUE:= "覆蓋之前的值"
endif
all:
@echo $(VALUE)
執行結果