'ifneq ... endif'语句是否有逻辑OR运算符?
也就是说,如果定义了变量'var1'或'var2',我不想执行某些语句。像这样:
ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif
我尝试了ifneq ($(WNDAP660),$(filter $(WNADAP620),y y))
,但它无效。
答案 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
使用grep
和egrep
来计算点击次数。然后使用non-0
和0
值。那是因为某些东西的价值比如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