如何使用make的ifeq
运算符执行逻辑OR ?
例如,我有(简化):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
Run Code Online (Sandbox Code Playgroud)
但想巩固这些界限.
(是的,是的,autotools,配置等等;对于当前的情况太过苛刻,想在这里保留Makefile中的所有内容)
[与此问题逻辑相反:如何在'ifeq'语句中使用多个条件 ]
mis*_*_mp 89
如邮件列表档案中所示,
一个人可以使用过滤功能.
例如
ifeq ($(GCC_MINOR),$(filter $(GCC_MINOR),4 5))
Run Code Online (Sandbox Code Playgroud)
过滤器X,AB将返回等于X的A,B的那些.
这种变化是
ifneq (,$(filter $(GCC_MINOR),4 5))
Run Code Online (Sandbox Code Playgroud)
其中使用与空字符串的负比较(如果GCC_MINOR与参数不匹配,则filter将返回空字符串)
这些方法的缺点是参数必须是单个单词.
Foo*_*Bah 25
您可以引入另一个变量.它并没有巩固两个检查,但它至少避免了必须将身体放入两次:
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
Run Code Online (Sandbox Code Playgroud)
rua*_*akh 14
我不认为有一种简洁明智的方法可以做到这一点,但是有冗长,明智的方式(例如Foo Bah's)和简洁的,病态的方式,例如
ifneq (,$(findstring $(GCC_MINOR),4-5))
CFLAGS += -fno-strict-overflow
endif
Run Code Online (Sandbox Code Playgroud)
(如果字符串$(GCC_MINOR)出现在字符串4-5中,它将执行命令).
这里是更灵活的变体:它使用外壳,但是允许检查任意条件:
ifeq ($(shell test ".$(GCC_MINOR)" = .4 -o \
".$(GCC_MINOR)" = .5 -o \
".$(TODAY)" = .Friday && printf "true"), true)
CFLAGS += -fno-strict-overflow
endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
117202 次 |
最近记录: |