不,条件语句中没有
and
运算符(但可以在条件语句中使用
and
函数)。
if
、
and
和
or
条件函数认为空字符串为false,其他任何内容都为true(包括只包含空格的字符串)。你找到的答案中的第一个建议测试变量是否为空字符串。第二个建议测试变量是否定义。在这两种情况下,它都不测试它们的值是否等于参考字符串。这可能是你不明白原因的原因。
在你的(简单)情况下,你可以嵌套条件语句。
ifeq ($(VAR1),some-string)
ifneq ($(VAR2),some-other-string)
<do something>
endif
endif
只有当两个条件都满足时,
<do something>
才会被执行。
对于有许多条件的复杂情况,您可以计算各个匹配变量:
MATCH1 := $(if $(strip $(VAR1)),$(patsubst some-string,,$(VAR1)),NO)
变量MATCH1
将取以下值:
NO
如果VAR1
未定义,为空字符串或为空格字符串,
- 空字符串如果它等于
some-string
,
- 否则为
VAR1
的值。
因此,当且仅当VAR1 == some-string
时,它将是空字符串。对于NOMATCH1
也是如此:
MOMATCH1 := $(if $(strip $(VAR2)),$(patsubst some-other-string,,$(VAR2)),NO)
如果
VAR2 != some-other-string
, 则
NOMATCH1
将不为空。现在,您可以使用条件函数来表达您的主要条件:
ifeq ($(or $(MATCH1),$(MATCH2),...),)
ifneq ($(and $(NOMATCH1),$(NOMATCH2),...),)
<do something>
endif
endif
site.mk
Makefile的第86行(GLUON_SITE_PACKAGES += -ffffm-button-bind
)将永远不会被make使用,因为它所包含的两个嵌套条件是相互排斥的...这可能不是你想要的。 - Renaud Pacalet