是否有一个逻辑OR运算符用于' ifneq&#39 ;?

时间:2011-11-28 13:47:41

标签: makefile

'ifneq ... endif'语句是否有逻辑OR运算符?

也就是说,如果定义了变量'var1'或'var2',我不想执行某些语句。像这样:

ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif

我尝试了ifneq ($(WNDAP660),$(filter $(WNADAP620),y y)),但它无效。

3 个答案:

答案 0 :(得分:10)

试试这个:

ifeq ($(filter y,$(WNDAP660) $(WNADAP620)),)
...
endif

答案 1 :(得分:3)

  

'ifneq'是否有逻辑OR运算符

NO。 Posix Make是贫血的。任何一个都没有逻辑或。例如,请参阅GNU make邮件列表中的Logical AND, OR, XOR operators inside ifeq ... endif construct condition。几十年来(字面意思)要求它们。

Posix make几乎没用,你通常在BSD系统上做的第一件事就是安装GNU Make(gmake)端口,这样你就可以编译库和程序。

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

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

IS_DARWIN = $(shell uname -s | $(EGREP) -i -c "darwin")
GCC42_OR_LATER = $(shell $(CXX) -v 2>&1 | $(EGREP) -i -c "^gcc version (4\.[2-9]|[5-9])")
CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")

# Below, we are building a boolean circuit that says "Darwin && (GCC 4.2 || Clang)"
MULTIARCH_SUPPORT = $(shell echo $$(($(IS_DARWIN) * ($(GCC42_OR_LATER) + $(CLANG_COMPILER)))))
ifneq ($(MULTIARCH_SUPPORT),0)
  CXXFLAGS += -arch x86_64 -arch i386
else
  CXXFLAGS += -march=native
endif

构建此类电路时,请-c使用grepegrep来计算点击次数。然后使用non-00值。那是因为某些东西的价值比如2。这就是为什么上面的测试是ifneq ($(MULTIARCH_SUPPORT),0),如果不等于0 )。

另一种方法是使用GNU Make Standard Library。它添加了以下运算符:not,and,或xor,nand,nor,xnor到CVS版本。

答案 2 :(得分:0)

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

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