makefile中的 ifeq ifneq ifdef ifndef條件判斷

feq ifneq ifdef ifndef

條件語句中使用到了三個關鍵字:“ifeq”、“else”和“endif”。其中:

1.        “ifeq”表示條件語句的開始,並指定了一個比較條件(相等)。之後是用圓括號括包圍的、使用逗號“,”分割的兩個參數,和關鍵字“ifeq”用空格分開。參數中的變量引用在進行變量值比較時被展開。“ifeq”之後就是當條件滿足make需要執行的,條件不滿足時忽略。

2.        “else”之後就是當條件不滿足時的執行部分。不是所有的條件語句都需要此部分。

3.        “endif”表示一個條件語句的結束,任何一個條件表達式都必須以“endif”結束。

此關鍵字用來判斷參數是否相等,格式如下:

`ifeq (ARG1, ARG2)'

`ifeq 'ARG1' 'ARG2''

`ifeq "ARG1" "ARG2"'

`ifeq "ARG1" 'ARG2''

`ifeq 'ARG1' "ARG2"'替換展開“ARG1”和“ARG1”後,對它們的值進行比較

通常我們會使用它來判斷一個變量的值是否爲空(不是任何字符)。參數值可能是通過引用變量或者函數得到的,因而在展開過程中可能造成參數值中包含空字符(空格等)。一般在這種情況時我們使用make的“strip”函數來對它變量的值進行處理,去掉其中的空字符。格式爲:

ifeq ($(strip $(foo)),)

TEXT-IF-EMPTY

endif

即就是在“$(foo)”中存在若干前導和結尾空格,“TEXT-IF-EMPTY”也會被作爲Makefile需要執行的一部分。

關鍵字“ifneq”實現的條件判斷語句和“ifeq”相反

關鍵字“ifdef”

關鍵字“ifdef”用來判斷一個變量是否已經定義。格式爲:

`ifdef VARIABLE-NAME'

如果變量“VAEIABLE_NAME”的值非空(在Makefile中沒有定義的變量的值爲空),那麼表達式爲真

例1:

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

 

例2:

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

例1中的結果是:“frobozz = yes”;而例2的結果是:“frobozz = no”。

關鍵字“ifndef”實現的功能和“ifdef”相反

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章