不,没有and
条件运算符(但有一个and
可以在条件语句中使用的函数)。这if
, and
and or
条件函数认为空字符串为假,其他任何内容都为真(包括仅包含空格的字符串)。您找到的答案中的第一个建议测试变量是否为空字符串。第二个测试变量是否已定义。在这两种情况下,它都不会测试它们的值是否等于引用字符串。这可能是您不能立即清楚的原因。
在您的(简单)情况下,您可以嵌套条件:
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
if VAR1
未定义,是空字符串或空格字符串,
- 如果等于则为空字符串
some-string
,
- 否则的值
VAR1
.
所以,当且仅当它是空字符串VAR1 == some-string
。同样适用于NOMATCH1
:
MOMATCH1 := $(if $(strip $(VAR2)),$(patsubst some-other-string,,$(VAR2)),NO)
NOMATCH1
将为非空当且仅当VAR2 != some-other-string
.
现在,您的主要条件可以使用条件函数来表达:
ifeq ($(or $(MATCH1),$(MATCH2),...),)
ifneq ($(and $(NOMATCH1),$(NOMATCH2),...),)
<do something>
endif
endif