¿Cómo se realiza un OR lógico con el ifeq
operador make ?
por ejemplo, tengo (simplificado):
ifeq ($(GCC_MINOR), 4)
CFLAGS += -fno-strict-overflow
endif
ifeq ($(GCC_MINOR), 5)
CFLAGS += -fno-strict-overflow
endif
pero quisiera consolidar estas líneas.
(sí, sí, autotools, configure, etc, etc; demasiado torpe para la situación actual, me gustaría mantener todo dentro del Makefile aquí)
[opuesto lógico de esta pregunta: cómo usar una condición múltiple en la declaración 'ifeq' ]
ifdef
operadores, esta pregunta está relacionada con el encadenamiento deifeq
operadores, similar, pero las respuestas son definitivamente diferentes.OR
operador lógico paraifneq
?Respuestas:
Como se encuentra en el archivo de la lista de correo,
se puede utilizar la función de filtro .
Por ejemplo
el filtro X, AB devolverá los de A, B que son iguales a X.
Una variación de esto es
donde se usa una comparación negativa con una cadena vacía (el filtro devolverá una cadena vacía si GCC_MINOR no coincide con los argumentos)
La desventaja de esos métodos es que los argumentos deben ser palabras sueltas.
fuente
ifneq (,$(filter 4 5,$(GCC_MINOR)))
:)if(flagA == TRUE || flagB == true)
, pero si lo hace$(filter true, $(flagA) $(flagB)
y ambos son ciertos, obtieneifeq(true, true true)
Puede introducir otra variable. No consolida ambos controles, pero al menos evita tener que meter el cuerpo dos veces:
fuente
No creo que haya una forma concisa y sensata de hacer eso, pero hay formas detalladas y sensatas (como la de Foo Bah) y formas concisas y patológicas, como
(que ejecutará el comando siempre que la cadena $ (GCC_MINOR) aparezca dentro de la cadena 4-5).
fuente
Aquí una variante más flexible: usa un shell externo, pero permite verificar condiciones arbitrarias:
fuente
Otro que puede considerar usar en este caso es:
En realidad yo uso el mismo en mi código porque no quiero mantener una por separado
config
oConfigure
.Pero tienes que usar un portátil, no anémico
make
, como GNU make (gmake
), y no el de Posixmake
.Y no aborda la cuestión de la lógica
AND
yOR
.fuente