首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Makefile ifeq逻辑或

Makefile ifeq逻辑或
EN

Stack Overflow用户
提问于 2011-10-05 11:33:43
回答 4查看 156K关注 0票数 111

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

例如,我有(简化):

代码语言:javascript
运行
复制
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 ]

EN

回答 4

Stack Overflow用户

发布于 2011-10-05 11:40:19

您可以引入另一个变量。它不会合并这两个检查,但它至少避免了必须将主体放入两次:

代码语言:javascript
运行
复制
do_it = 
ifeq ($(GCC_MINOR), 4)
    do_it = yes
endif
ifeq ($(GCC_MINOR), 5)
    do_it = yes
endif
ifdef do_it
    CFLAGS += -fno-strict-overflow
endif
票数 33
EN

Stack Overflow用户

发布于 2011-10-05 11:48:05

我不认为有一种简洁、明智的方法来做到这一点,但有冗长、明智的方法(如Foo Bah)和简洁、病态的方法,如

代码语言:javascript
运行
复制
ifneq (,$(findstring $(GCC_MINOR),4-5))
    CFLAGS += -fno-strict-overflow
endif

(如果字符串$(GCC_MINOR)出现在字符串4-5中,它将执行该命令)。

票数 19
EN

Stack Overflow用户

发布于 2016-09-29 08:03:57

这里有更灵活的变体:它使用外部shell,但允许检查任意条件:

代码语言:javascript
运行
复制
ifeq ($(shell test ".$(GCC_MINOR)" = .4  -o  \
                   ".$(GCC_MINOR)" = .5  -o  \
                   ".$(TODAY)"     = .Friday  &&  printf "true"), true)
    CFLAGS += -fno-strict-overflow
endif
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7656425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档