Есть ли логический оператор ИЛИ для 'ifneq'? - PullRequest
14 голосов
/ 28 ноября 2011

Существует ли логический оператор ИЛИ для оператора ifneq ... endif?

То есть я бы не хотел выполнять некоторые операторы, если определена переменная 'var1' или 'var2'.Примерно так:

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

Я пробовал ifneq ($(WNDAP660),$(filter $(WNADAP620),y y)), но он не работает.

Ответы [ 4 ]

10 голосов
/ 28 ноября 2011

Попробуйте это:

ifeq ($(filter y,$(WNDAP660) $(WNADAP620)),)
...
endif
3 голосов
/ 01 марта 2015

Есть ли логический оператор ИЛИ для 'ifneq'

NO.Posix Make является анемичным.Там нет логического ИЛИ для любого из них.См., Например, Логические операторы И, ИЛИ, XOR внутри условия ifeq ... endif конструкции в списке рассылки GNU make.Они запрашивались десятилетиями (буквально).

Создание Posix практически бесполезно, и одна из первых вещей, которые вы обычно делаете в системе BSD, - это установка порта GNU Make (gmake), чтобы вы могли компилировать библиотеки ипрограммы.

Если вы используете GNU Make, у вас есть другие варианты.

Одна из альтернатив - использовать математическую оболочку для симуляции схемы.Например, следующее: Crypto ++ 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 .К версии CVS добавляются следующие операторы: not, и, или, xor, nand, nor, xnor.

2 голосов
/ 28 ноября 2011

Сырой, но эффективный:

ifneq ($(WNDAP660),y) 
 ifneq ($(WNADAP620),y)
 ...
 endif
endif
0 голосов
/ 01 марта 2016

Я протестировал следующий код, который хорошо работает

ifeq ($(var1),value1) or ($(var2), value2)
   #do something here
endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...