¿Hay un operador lógico OR para la 'ifneq'
NO. Posix Make es anémico. No hay OR lógico para ninguno de ellos. Ver, por ejemplo, Logical AND, OR, XOR operators inside ifeq ... endif construct condition en la lista de correo de make GNU. Han sido solicitados por décadas (literalmente).
Posix make es casi inútil, y una de las primeras cosas que suele hacer en un sistema BSD es instalar el puerto GNU Make (gmake) para que pueda compilar bibliotecas y programas.
Si está utilizando GNU Make, entonces tiene otras opciones.
Una alternativa es utilizar la shell de matemáticas para simular un circuito. Por ejemplo, la siguiente es de 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
Cuando se construye un circuito de este tipo, utilice -c
para grep
y egrep
para contar golpes. Luego use los valores non-0
y 0
. Eso es en caso de que algo tenga un valor de, por ejemplo, 2
. Es por eso que la prueba anterior es ifneq ($(MULTIARCH_SUPPORT),0)
(si no es igual a 0).
Otra alternativa es usar GNU Make Standard Library. Agrega los siguientes operadores: no, y, o, xor, nand, nor, xnor a la versión de CVS.
Es posible que desee una Y en lugar de un O, ¿verdad? Si escribió 'y! = WNDAP660 || y! = WNADAP620', entonces al menos una y posiblemente ambas alternativas serán verdaderas, por lo que siempre se tomará la acción. –
Posible duplicado de [Makefile ifeq logical or] (http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or) –
Duplicación anterior: * [Verificación de condiciones complejas en Makefile] (http: // stackoverflow. com/questions/5584872/complex-conditions-check-in-makefile) *. –