Есть ли логический оператор ИЛИ для '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.