如何使用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'语句中使用多个条件 ]
在GNU makefile中,如果输入变量等于两个值中的一个,我想将输出变量设置为一个值(假设为"true"),如果输入变量不等于另一个值("false").
感谢这个SO答案,我已经了解了这些and和or功能,不久之后我就找到了这个if功能.这些函数似乎在我的make版本中可用,所以我想使用它们.我想写这样的东西:
TEST_INPUT = `hostname`
TEST_OUTPUT = $(if $(or $(eq $(TEST_INPUT),hal9000),
$(eq $(TEST_INPUT),pipboy)),true,false)
Run Code Online (Sandbox Code Playgroud)
不幸的是我不能,因为我找不到任何明显形式的预期eq功能.我能够使用该filter功能实现我想要的:
TRUE_HOSTS = hal9000 pipboy
TEST_OUTPUT = $(if $(filter $(TEST_INPUT),$(TRUE_HOSTS)),true,false)
Run Code Online (Sandbox Code Playgroud)
或subst功能:
TEST_OUTPUT = $(if $(and $(subst hal9000,,$(TEST_INPUT)),
$(subst pipboy,,$(TEST_INPUT))),
false,true)
Run Code Online (Sandbox Code Playgroud)
但对我来说,它不是一个漂亮的外观也不是可读的代码.是否有更接近第一个示例的解决方案(使用不存在eq函数的解决方案)?也许我没有达到目的if,and而且or功能完全没有?
是否有'ifneq ... endif'语句的逻辑OR运算符?
也就是说,如果定义了变量'var1'或'var2',我不想执行某些语句.像这样的东西:
ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif
Run Code Online (Sandbox Code Playgroud)
我试过ifneq ($(WNDAP660),$(filter $(WNADAP620),y y)),但它没有用.
如何在Makefile中表达以下逻辑?
if $(XORG_VERSION) > "7.7"
<do some thing>
fi
Run Code Online (Sandbox Code Playgroud)
Makefile的条件部分仅提供ifeq或ifneq.
如果语法类似于,如何添加多个选择
ifeq ($(VAR1),some-string)
Run Code Online (Sandbox Code Playgroud)
结合
ifneq ($(VAR2),some-other-string)
Run Code Online (Sandbox Code Playgroud)
再加上一些……
有一个班轮吗?喜欢(幻想代码):
ifeq $VAR1=some-string and not $VAR2=some-other-string
Run Code Online (Sandbox Code Playgroud)
我发现这个答案我不清楚,因为那里的 ifeq 语句中没有等式。