如果语法类似于,如何添加多个选择
ifeq ($(VAR1),some-string)
Run Code Online (Sandbox Code Playgroud)
结合
ifneq ($(VAR2),some-other-string)
Run Code Online (Sandbox Code Playgroud)
再加上一些……
有一个班轮吗?喜欢(幻想代码):
ifeq $VAR1=some-string and not $VAR2=some-other-string
Run Code Online (Sandbox Code Playgroud)
我发现这个答案我不清楚,因为那里的 ifeq 语句中没有等式。
不,and
条件没有运算符(但有一个and
可以在条件中使用的函数)。的if
,and
并且or
有条件的功能考虑空字符串是错误的,并且别的为真(只包含空格包括字符串)。您找到的答案中的第一个建议测试变量是否为空字符串。第二个测试是否定义了变量。在这两种情况下,它都不会测试它们的值是否等于引用字符串。这可能是您没有立即清楚的原因。
在您的(简单)情况下,您可以嵌套条件:
ifeq ($(VAR1),some-string)
ifneq ($(VAR2),some-other-string)
<do something>
endif
endif
Run Code Online (Sandbox Code Playgroud)
<do something>
当且仅当两个条件通过时才会考虑。
对于具有许多条件的复杂情况,您可以计算单个匹配变量:
MATCH1 := $(if $(strip $(VAR1)),$(patsubst some-string,,$(VAR1)),NO)
Run Code Online (Sandbox Code Playgroud)
变量MATCH1
将取值:
NO
如果VAR1
未定义,则是空字符串或空格字符串,some-string
,VAR1
。因此,当且仅当 为空字符串VAR1 == some-string
。同样适用于NOMATCH1
:
MOMATCH1 := $(if $(strip $(VAR2)),$(patsubst some-other-string,,$(VAR2)),NO)
Run Code Online (Sandbox Code Playgroud)
NOMATCH1
当且仅当 为非空VAR2 != some-other-string
。
现在,您的主要条件可以使用条件函数表示:
ifeq ($(or $(MATCH1),$(MATCH2),...),)
ifneq ($(and $(NOMATCH1),$(NOMATCH2),...),)
<do something>
endif
endif
Run Code Online (Sandbox Code Playgroud)