Makefile 对于';ifneq';?

Makefile 对于';ifneq';?,makefile,Makefile,“ifneq”是否有逻辑OR运算符。。。endif的声明 也就是说,如果定义了变量“var1”或“var2”,我不希望执行某些语句。大概是这样的: ifneq ($(WNDAP660),y) OR $(WNADAP620),y)) ... endif 我尝试过ifneq($(WNDAP660),$(filter$(WNADAP620),y-y)),但它不起作用。试试这个: ifeq ($(filter y,$(WNDAP660) $(WNADAP620)),) ... endif 粗糙但有效

“ifneq”是否有逻辑OR运算符。。。endif的声明

也就是说,如果定义了变量“var1”或“var2”,我不希望执行某些语句。大概是这样的:

ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif
我尝试过ifneq
($(WNDAP660),$(filter$(WNADAP620),y-y))
,但它不起作用。

试试这个:

ifeq ($(filter y,$(WNDAP660) $(WNADAP620)),)
...
endif
粗糙但有效:

ifneq ($(WNDAP660),y) 
 ifneq ($(WNADAP620),y)
 ...
 endif
endif
“ifneq”是否有逻辑OR运算符

不,Posix Make贫血。它们中的任何一个都没有逻辑OR。例如,请参见GNU make邮件列表。几十年来(字面上)人们一直在要求它们

POSIXMake几乎毫无用处,在BSD系统上通常首先要做的事情之一是安装GNUMake(gmake)端口,以便编译库和程序

如果您使用的是GNUMake,那么您还有其他选择

另一种方法是使用shell数学来模拟电路。例如,以下内容来自:

IS_DARWIN=$(shell uname-s |$(EGREP)-i-c“DARWIN”)
GCC42_或_LATER=$(shell$(CXX)-v2>&1|$(EGREP)-i-c“^gcc版本(4\[2-9]|[5-9]))
CLANG|U编译器=$(shell$(CXX)--版本2>&1 |$(EGREP)-i-c“CLANG”)
#下面,我们正在构建一个布尔电路,上面写着“Darwin&(GCC 4.2 | | Clang)”
MULTIARCH_支持=$(shell echo$($(IS_DARWIN)*($(GCC42_或更高版本)+$(CLANG_编译器()()))
ifneq($(多拱支撑),0)
CXXFLAGS+=-arch x86_64-arch i386
其他的
CXXFLAGS+=-march=本地
恩迪夫
在构建这样的电路时,使用
-c
进行
grep
egrep
计算点击次数。然后使用
非0
0
值。如果某个值为,比如说,
2
。这就是为什么上面的测试是
ifneq($(多拱门支持),0)
(如果不等于0)


另一种选择是使用。它在CVS版本中添加了以下运算符:not、and、or、xor、nand、nor、xnor。

我已经测试了以下代码,效果很好

ifeq ($(var1),value1) or ($(var2), value2)
   #do something here
endif

你可能想要AND而不是OR,不是吗?如果你写了
y!=WNDAP660 | | y!=WNADAP620
,则至少有一个备选方案是正确的,并且可能两个备选方案都是正确的,因此将始终执行该操作。旧副本的可能副本:。您能解释一下吗??假设我想要ifeq($(WNDAP660),y)或$(WNADAP620),y)),那么我该怎么办呢?只要否定条件:
ifneq($(filter y,$(WNDAP660)$(WNADAP620)),)
如果您的任何变量被设置为“
y
”,那么
filter
返回它们,如果没有设置任何一个变量,就说,
y
,“
y
”用于设置两者时的情况。忽略我的GNU make 4.1中的第二个条件