Saltar al contenido

Cómo verificar si una variable es igual a uno de dos valores usando las funciones if / o / and

Solución:

Lo extraño de los condicionales GNUmake es que no hay un tipo booleano en make, todo es una cadena. Entonces, todos los condicionales funcionan con la cadena vacía para ‘falso’ y todas las cadenas no vacías (incluidas cadenas como false y 0) como “verdadero”.

Dicho esto, el hecho de que eq lo que falta es una molestia, aunque menor. Generalmente puede obtener lo que quiere de filter o findstring, y filter a menudo le permite buscar una lista completa de cadenas para que coincidan como en su segundo ejemplo.

Si realmente lo necesita, puede definir su propia función de ecualización:

eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))

Que desafortunadamente tienes que usar como $(call eq,,)

La respuesta de Chris Dodd es buena, pero hay un caso de esquina para el que proporciona un resultado incorrecto. Si ambas variables que se comparan están vacías (es decir, falsas), devolverá falso. Una versión mejorada sería:

eq = $(if $(or $(1),$(2)),$(and $(findstring $(1),$(2)),
                                $(findstring $(2),$(1))),1)

Esto primero comprueba si alguno de los argumentos no está vacío y, si es así, utiliza la técnica anterior para compararlos. De lo contrario, devuelve 1, para indicar que los valores son iguales ya que ambos están vacíos.

Dependiendo de su contexto, considere usar GMSL (GNU Make Standard Library), que es una colección de funciones en un archivo make include “… que proporciona manipulación de listas y cadenas, aritmética de enteros, matrices asociativas, pilas y funciones de depuración. ” Ver http://gmsl.sourceforge.net/

Tiene una función de “cadena igual”, seq, así como una serie de otros manipuladores útiles:

    TEST_INPUT = $(shell hostname -s)
    TEST_OUTPUT = $(if $(or $(call seq,$(TEST_INPUT),hal9000),
                            $(call seq,$(TEST_INPUT),pipboy)),true,false)

Además, use la sintaxis $ (shell …) en lugar de comillas invertidas para un mejor manejo de las nuevas líneas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *