gpt4 book ai didi

Makefile ifeq 逻辑或

转载 作者:行者123 更新时间:2023-12-03 05:09:49 31 4
gpt4 key购买 nike

如何使用 make 的 ifeq 运算符执行逻辑 OR?

例如,我有(简化的):

ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif

但想合并这些行。

(是的,是的,自动工具、配置等;对于当前情况来说太严厉了,希望将所有内容都保留在 Makefile 中)

[此问题的逻辑相反:How to Use of Multiple condition in 'ifeq' statement ]

最佳答案

正如在邮件列表存档中找到的那样,

可以使用过滤功能。

例如

ifeq ($(GCC_MINOR),$(filter $(GCC_MINOR),4 5))

过滤器 X, A B 将返回 A,B 中等于 X 的值。请注意,虽然这与上面的示例无关,但这是一个 XOR 运算。 IE。如果你有类似的东西:

ifeq (4, $(filter 4, $(VAR1) $(VAR2)))

然后做例如make VAR1=4 VAR2=4,过滤器将返回4 4,它不等于4

执行 OR 运算的变体是:

ifneq (,$(filter $(GCC_MINOR),4 5))

其中使用与空字符串的否定比较(如果GCC_MINOR与参数不匹配,filter将返回空字符串)。使用 VAR1/VAR2 示例,它看起来像这样:

ifneq (, $(filter 4, $(VAR1) $(VAR2)))

这些方法的缺点是您必须确保这些参数始终是单个单词。例如,如果VAR14 foo,则过滤结果仍为4,且ifneq表达式仍为真的。如果 VAR14 5,则过滤结果为 4 5,且 ifneq 表达式为 true。

一个简单的替代方法是将相同的操作放在 ifeqelse ifeq 分支中,例如像这样:

ifeq ($(GCC_MINOR),4)
@echo Supported version
else ifeq ($(GCC_MINOR),5)
@echo Supported version
else
@echo Unsupported version
endif

关于Makefile ifeq 逻辑或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656425/

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