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。

你可能感兴趣的:(其他)