'ifneq ... endif'語句是否存在邏輯OR運算符?'ifneq'是否存在邏輯OR運算符?
也就是說,如果定義了變量'var1'或'var2',我不想執行一些語句。這樣的事情:
ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif
我試過ifneq ($(WNDAP660),$(filter $(WNADAP620),y y))
,但它不工作。
'ifneq ... endif'語句是否存在邏輯OR運算符?'ifneq'是否存在邏輯OR運算符?
也就是說,如果定義了變量'var1'或'var2',我不想執行一些語句。這樣的事情:
ifneq ($(WNDAP660),y) OR $(WNADAP620),y))
...
endif
我試過ifneq ($(WNDAP660),$(filter $(WNADAP620),y y))
,但它不工作。
試試這個:
ifeq ($(filter y,$(WNDAP660) $(WNADAP620)),)
...
endif
你能解釋我嗎?假設我想要ifeq($(WNDAP660),y)或$(WNADAP620),y))那麼我該怎麼做? –
只是否定條件:'ifneq($(filter y,$(WNDAP660)$(WNADAP620)),)' –
如果您的任何變量設置爲「y」,則filter將返回它們,比如說
原油,但有效:
ifneq ($(WNDAP660),y)
ifneq ($(WNADAP620),y)
...
endif
endif
是否有邏輯OR運算符爲 'ifneq'
NO。 Posix Make是貧血的。他們中沒有任何邏輯OR。例如,請參閱GNU make郵件列表上的Logical AND, OR, XOR operators inside ifeq ... endif construct condition。他們已被要求數十年(字面上)。
Posix make幾乎是無用的,你通常在BSD系統上做的第一件事情是安裝GNU Make(gmake)端口,以便編譯庫和程序。
如果您使用的是GNU Make,那麼您還有其他選擇。
一種替代方法是使用殼數學來模擬電路。例如,下面是從Crypto++'sGNUmakefile:
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。它將以下運算符添加到CVS版本中:not,and,or,xor,nand,nor,xnor。
我已經測試了下面的代碼,效果很好
ifeq ($(var1),value1) or ($(var2), value2)
#do something here
endif
忽略了我在Fedora上的GNU make 4.1中的第二個條件 –
你可能想的和,而不是OR,不是嗎?如果你寫了'y!= WNDAP660 || y!= WNADAP620',那麼至少有一個,也可能兩個選擇都是真的,所以總是會採取行動。 –
[Makefile ifeq logical or]可能重複(http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or) –
較舊的重複項:* [複雜條件檢查Makefile](http:// stackoverflow。 COM /問題/ 5584872 /複雜的條件,辦理登機手續,生成文件)*。 –