2010-04-30 17 views
45

Una variable devuelve MINGW32_NT-5.1 o CYGWIN_NT-5.1. (sí, punto al final)Makefile: contiene cadena

necesidad de comparar var que contiene dado NT-5.1 colocar en cualquier lugar.

Usando cygwin y me gustaría ser compatible con casi cualquier * nix.

Respuesta

75

La función findstring es lo que desea su corazón:

$(findstringencuentran,en)

Búsquedas en de una ocurrencia de encontrar . Si ocurre, el valor es find; de lo contrario, el valor está vacío. Puede usar esta función en un condicional para probar la presencia de una subcadena específica en una cadena dada. Por lo tanto, los dos ejemplos,

$(findstring a,a b c) 
$(findstring a,b c) 

producen los valores "a" y "" (la cadena vacía), respectivamente. Ver Testing Flags, para una aplicación práctica de findstring.

Algo así como:

ifneq (,$(findstring NT-5.1,$(VARIABLE))) 
    # Found 
else 
    # Not found 
endif 
+1

Grande, exactamente lo que quiero. Solo una pregunta: ¿cuál es la coma aquí para 'ifneq (, $ (...' – Pablo

+3

Parse it como 'ifneq (A, B)' donde A es la cadena vacía y B es '$ (findstring ...)' Parece extraño porque no cita cadenas en Makefiles. –

+1

¿Es sensible la mayúscula y la minúscula? ¿En caso afirmativo, existe una forma sencilla de hacer coincidir mayúsculas y minúsculas? El manual no estaba claro ... –

11
VARIABLE=NT-5.1_Can_be_any_string 
ifeq ($(findstring NT-5.1,$(VARIABLE)),NT-5.1) 
    # Found 
    RESULT=found 
else 
    # Not found 
    RESULT=notfound 
endif 

all: 
    @echo "RESULT=${RESULT} , output=$(findstring NT-5.1,$(VARIABLE))" 

Coincide con la cadena dada y devuelve

+4

Esto funciona y leer es mejor que la respuesta aceptada, IMO. –

Cuestiones relacionadas