指派符号:
簡單指派(:=):隻對目前語句有效,指派改變的值不會傳遞
遞歸指派(=):一個地方值改變,所有與這個變量相關的值都會變
條件指派(?=):變量未定義,指派有效,變量沒有定義,指派無效。
追加指派(+=):在原變量後面加上一個新的值,用空格隔開
注意:makefile變量的值都屬于文本資料,makefile裡面用$(變量)來表示變量的值
代碼執行個體:
# ex1
# x := foo
# y := $(x)b //$(x)表示變量的值
# x := new //運作之後的 y = foob ; x = new
# ex2
# x = foo
# y = $(x)b
# x = new //運作之後的 y = newb ; x = new
# ex3
# y := $(x)b
# x ?= new //?=因為前面已經指派,是以無效
//運作之後的 y = foob ; x = foo
# ex4
# x += new
//運作之後的 y = foob ; x = foo new
#代碼如果需要運作,請去掉前面的#号注釋
常用的預定義變量:
自動變量:
$@ : 目前規則中觸發指令執行的目标
$^ : 目前規則中的所有依賴
$< : 目前規則中的第一條依賴
特殊變量:
$() : 括号裡面大寫基本上都是make自帶的一些特殊變量,詳細的可查make官網幫助文檔
.PHONY : all first second third
all : first second third
@echo "\$$@ => $@" #列印all
@echo "$$^ => $^" #列印first second third
@echo "$$< => $<" #列印first
firtst:
second:
third:
--------
.PHONY : all out first second third test
all out :
@echo "$(MAKE)" #列印目前make解釋器的檔案名
@echo "$(MAKECMDGOALS)" #列印指令行中指定的目标名(make的指令行參數)
@echo "$(MAKEFILE_LIST)" #make所需要處理的makefile檔案清單,目前make檔案總是處于清單最後,檔案名之間以空格分隔
first :
@echo "first"
second :
@echo "second"
third :
@echo "third"
test :
@$(MAKE) first
@$(MAKE) second
@$(MAKE) third
-------
.PHONY : test1 test2
TDelphi := Delphi Tang
D.T.Software := D.T.
test1 :
@echo "$(MAKE_VERSION)" #目前make解釋器的版本
@echo "$(CURDIR)" #目前make解釋器的工作目錄
@echo "$(.VARIABLES)" #所有已定義的變量(預定義變量和自定義變量)