1. 程式人生 > 其它 >makefile檔案編寫_Makefile變數的定義和使用

makefile檔案編寫_Makefile變數的定義和使用

技術標籤:makefile檔案編寫變數名稱裡可以有空格

變數對於我們來說是不陌生的,在學習各種程式語言時會經常用到。就拿C語言來說,變數的使用是十分常見的,變數可以用來儲存一個值或者是使用變數進行運算操作。Makefile 中的變數也是這樣,我們可以利用它來表示某些多處使用而又可能發生變化的內容,不僅可以節省重複修改的工作,還可以避免遺漏。

變數的定義

Makefile 檔案中定義變數的基本語法如下:

變數的名稱=值列表

Makefile 中的變數的使用其實非常的簡單,因為它並沒有像其它語言那樣定義變數的時候需要使用資料型別。變數的名稱可以由大小寫字母、阿拉伯數字和下劃線構成。等號左右的空白符沒有明確的要求,因為在執行 make 的時候多餘的空白符會被自動的刪除。至於值列表,既可以是零項,又可以是一項或者是多項。如:

VALUE_LIST = one two three

呼叫變數的時候可以用 "$(VALUE_LIST)" 或者是 "${VALUE_LIST}" 來替換,這就是變數的引用。例項:

OBJ=main.o test.o test1.o test2.otest:$(OBJ)gcc -o test $(OBJ)

這就是引用變數後的 Makefile 的編寫,比我們之前的編寫方式要簡單的多。當要新增或者是刪除某個依賴檔案的時候,我們只需要改變變數 "OBJ" 的值就可以了。

變數的基本賦值

知道了如何定義,下面我們來說一下 Makefile 的變數的四種基本賦值方式:

  • 簡單賦值 ( := ) 程式語言中常規理解的賦值方式,只對當前語句的變數有效。

  • 遞迴賦值 (=) 賦值語句可能影響多個變數,所有目標變數相關的其他變數都受影響。

  • 條件賦值 ( ?= ) 如果變數未定義,則使用符號中的值定義變數。如果該變數已經賦值,則該賦值語句無效。

  • 追加賦值 ( += ) 原變數用空格隔開的方式追加一個新值。

簡單賦值

x:=foo

y:=$(x)b

x:=new

test:

@echo "y=>$(y)"

@echo "x=>$(x)"

在 shell 命令列執行make test我們會看到:

y=>foob

x=>new

遞迴賦值

x=foo

y=$(x)b

x=new

test:

@echo "y=>$(y)"

@echo "x=>$(x)"

在 shell 命令列執行make test我們會看到:

y=>newb
x=>new

條件賦值

x:=foo

y:=$(x)b

x?=new

test:

@echo "y=>$(y)"

@echo "x=>$(x)"

在 shell 命令列執行make test我們會看到:

y=>foob
x=>foo

追加賦值

x:=foo

y:=$(x)b

x+=$(y)

test:

@echo "y=>$(y)"

@echo "x=>$(x)"

在 shell 命令列執行make test我們會看到:

y=>foob
x=>foo foob

不同的賦值方式會產生不同的結果,我們使用的時候應該根據具體的情況選擇相應的賦值規則。變數使用的範圍很廣,它可以出現在規則的模式中,也可以出現在規則的命令中或者是作為 Makefile 函式的引數來使用。總之,變數的使用在我們的 Makefile 編寫中還是非常廣泛的,可以說我們的 Makefile 中必不可少的東西。其實變數在我們的 Makefile 中還是有很多種類的,它們的意義是不相同的。比如我們的環境變數,自動變數,模式指定變數等。其他的變數我們會在其他的文章裡做介紹。

2d4e6cd5d0981e7c83e926b3fa5301b9.png