gpt4 book ai didi

makefile - 在 gnu Makefile 中组合多个 ifeq 和 ifneq

转载 作者:行者123 更新时间:2023-12-03 21:22:52 30 4
gpt4 key购买 nike

如果语法类似于,如何添加多个选择

ifeq ($(VAR1),some-string)

结合
ifneq ($(VAR2),some-other-string)

再加上一些……

有一个类轮吗?喜欢(幻想代码):
ifeq $VAR1=some-string and not $VAR2=some-other-string

我找到了 this answer我不清楚,因为那里的 ifeq 语句中没有等式。

最佳答案

不,没有and条件运算符(但有一个 and 函数可用于条件)。 if , andor条件函数认为空字符串为假,其他任何为真(包括仅包含空格的字符串)。您找到的答案中的第一个建议测试变量是否为空字符串。第二个测试是否定义了变量。在这两种情况下,它都不会测试它们的值是否等于引用字符串。这可能是您没有立即清楚的原因。

在您的(简单)情况下,您可以嵌套条件:

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

    关于makefile - 在 gnu Makefile 中组合多个 ifeq 和 ifneq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51517970/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com