如果语法类似于
,如何添加多个选择ifeq ($(VAR1),some-string)
与
组合ifneq ($(VAR2),some-other-string)
结合更多...
有一个班轮吗?像(幻想代码):
ifeq $VAR1=some-string and not $VAR2=some-other-string
我发现this answer不清楚,因为ifeq语句中没有方程式。
答案 0 :(得分:3)
否,条件语句没有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)
NOMATCH1
将仅在VAR2 != some-other-string
中为非空。
现在,您的主要条件可以使用条件函数表示:
ifeq ($(or $(MATCH1),$(MATCH2),...),)
ifneq ($(and $(NOMATCH1),$(NOMATCH2),...),)
<do something>
endif
endif
答案 1 :(得分:0)
# Param 1 : Thing to do
# Param 2: VAR VALUE VAR1 VALUE1 VAR2 VALUE2 ...
# Each param VAR/VALUE must be space separated
define rec_check
$(if $(strip $(2)),$(if $(findstring _$($(word 1,$(2)))_,_$(word 2,$(2))_),$(call rec_check,$(1),$(subst $(word 1,$(2)) $(word 2,$(2)),,$(2)))),$(1))
endef
# Usage :
# MY_VAR=ok
# MY_VAR2=ok
# $(call rec_check,echo "It works",MY_VAR ok MY_VAR2 ok)
# $(call rec_check,echo "It does not work",MY_VAR ok MY_VAR2 ok2)
尽管它被限制为没有任何空格的值,但是它可以工作。此外,它仅检查AND条件。
您仍然可以改善自己的需求