makefile 的ifeq,filter,strip 簡單使用。

ifeq (,$(filter $(strip $(AAA)), BBB CCC))
do something
else
do nothing
endif

ifeq語句

ifeq : 判斷語句,用於比較兩個參數是否相等,相等則該語句通過。

如果a和b相等,則do something

ifeq (a, b)
    # do something
endif

filter語句
filter: 過濾語句,過濾掉不符合指定的模式的內容,僅保留符合指定的模式的內容。

VAR := 1 2 3 4 5
指定的模式爲 1 2 3,多個模式之間用空格區分
$(filter 1 2 3 , $(VAR))
結果是:
1 2 3

3)
strip 去空字符語句,去掉字串中開頭和結尾的空字符(空字符包括空格、[Tab]等不可顯示字符)。

VAR = 1 2 3
$(strip $(VAR))
結果是:
1 2 3

總結:

看完這三個語句的說明,我們再來看最開始的

ifeq (,$(filter $(strip $(AAA)), BBB CCC))
do something
else
do nothing
endif

第一種情況:
當AAA 中有 BBB 或者 CCC 的時候:
AAA= BBB DDD
$(strip $(AAA)= BBB DDD
上面就可以寫爲

ifeq (,$(filter BBB DDD, BBB CCC))
do something
else
do nothing
endif

$(filter BBB DDD, BBB CCC) = BBB
上面就可以寫爲

ifeq (,BBB)
do something
else
do nothing
endif

所以結果爲do nothing。

第二種情況:
當AAA 中沒有 BBB 或者 CCC 的時候:

AAA= EEE
$(strip $(AAA)= EEE
上面就可以寫爲

ifeq (,$(filter EEE, BBB CCC))
do something
else
do nothing
endif

$(filter EEE, BBB CCC) = NULL
上面就可以寫爲

ifeq (,NULL)
do something
else
do nothing
endif

所以結果爲do something。

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