makefile-03-條件判斷

8.條件判斷語句http://blog.51cto.com/11134889/2108167

8.1.語法規則

Makefile中支持條件判斷語句,可以直接比較兩個不同變量的值和常量值。

注意:條件判斷語句只能用於控制make實際執行的語句,不能控制規則中命令的執行過程。

條件判讀語法說明:

條件判斷關鍵字:

示例:

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=

test:
    ifeq ($(var1),$(var2))
        @echo "var1 == var2"
    else
        @echo "var1 != var2"
    endif

    ifneq ($(var2),)
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif

    ifdef var2
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif

    ifndef var3
        @echo "var3 is empty"    
    else
        @echo "var3 is NOT empty"    
    endif

輸出結果:

8.2.工程經驗

1.條件判斷語句之前可有有空格,但不能有Tab字符(‘\t’)

2.在條件語句中不要使用自動變量( $@ $^ @<)

3.一條完整的條件語句必須位於同一個Makefile中

4.條件判斷類似C語言中的宏,預處理階段有效,執行階段無效

5.Make在加載Makefile時,首先計算表達式的值(賦值方式不同,計算方式不同),根據判斷語句單純表達式決定執行的內容。

問題,下面Makefile執行後是否相同??

答案:不同,前者的賦值方式可以做在make加載Makefile時判斷出變量是否定義,而後者無法做出判斷。

示例:

.PHONY : test

var1 :=
var2 := $(var1)
var3 =
var4 = $(var3)

#var3 = 3

test:
    ifdef var1
        @echo "var1 is defined"
    else
        @echo "var1 is NOT defined"
    endif

    ifdef var2
        @echo "var2 is defined"    
    else
        @echo "var2 is NOT defined"    
    endif

    ifdef var3
        @echo "var3 is defined"
    else
        @echo "var3 is NOT defined"
    endif

    ifdef var4
        @echo "var4 is defined"    
    else
        @echo "var4 is NOT defined"    
    endif

輸出結果:

 

 

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