El tutorial o código que verás en este post es la resolución más fácil y válida que hallamos a esta inquietud o problema.
Solución:
Como se encuentra en el archivo de la lista de correo,
- http://osdir.com/ml/gnu.make.windows/2004-03/msg00063.html
- http://osdir.com/ml/gnu.make.general/2005-10/msg00064.html
uno puede usar el filter
función.
Por ejemplo
ifeq ($(GCC_MINOR),$(filter $(GCC_MINOR),4 5))
filter X, A B
devolverá aquellos de A,B que son iguales a X. Tenga en cuenta que, aunque esto no es relevante en el ejemplo anterior, esta es una operación XOR. Es decir, si en cambio tienes algo como:
ifeq (4, $(filter 4, $(VAR1) $(VAR2)))
Y luego haz por ejemplo make VAR1=4 VAR2=4
el filtro volverá 4 4
que no es igual a 4
.
Una variación que realiza una operación OR en su lugar es:
ifneq (,$(filter $(GCC_MINOR),4 5))
donde una comparación negativa contra un vacío string se usa en su lugar (filter
volverá en vacío string si GCC_MINOR
no coincide con los argumentos). Utilizando el VAR1
/VAR2
ejemplo se vería así:
ifneq (, $(filter 4, $(VAR1) $(VAR2)))
La desventaja de esos métodos es que debe estar seguro de que estos argumentos siempre serán palabras sueltas. Por ejemplo, si VAR1
es 4 foo
el resultado del filtro sigue siendo 4
y el ifneq
la expresión sigue siendo true. Si VAR1
es 4 5
el resultado del filtro es 4 5
y el ifneq
la expresión es true.
Una alternativa fácil es simplemente poner la misma operación en ambos ifeq
y else ifeq
rama, por ejemplo, así:
ifeq ($(GCC_MINOR),4)
@echo Supported version
else ifeq ($(GCC_MINOR),5)
@echo Supported version
else
@echo Unsupported version
endif
Puedes introducir otra variable. No consolida ambos controles, pero al menos evita tener que meter el cuerpo dos veces:
do_it =
ifeq ($(GCC_MINOR), 4)
do_it = yes
endif
ifeq ($(GCC_MINOR), 5)
do_it = yes
endif
ifdef do_it
CFLAGS += -fno-strict-overflow
endif
No creo que haya una forma concisa y sensata de hacerlo, pero hay formas detalladas y sensatas (como la de Foo Bah) y formas concisas y patológicas, como
ifneq (,$(findstring $(GCC_MINOR),4-5))
CFLAGS += -fno-strict-overflow
endif
(que ejecutará el comando siempre que el string $(GCC_MINOR) aparece dentro de la string 4-5).
Finalizando este artículo puedes encontrar las crónicas de otros usuarios, tú igualmente puedes mostrar el tuyo si te apetece.