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”相反