天天看點

make學習第三章——make的變量

指派符号:

簡單指派(:=):隻對目前語句有效,指派改變的值不會傳遞

遞歸指派(=):一個地方值改變,所有與這個變量相關的值都會變

條件指派(?=):變量未定義,指派有效,變量沒有定義,指派無效。

追加指派(+=):在原變量後面加上一個新的值,用空格隔開

注意: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)"     #所有已定義的變量(預定義變量和自定義變量)