2010-04-30 16 views
45

Una variabile restituisce MINGW32_NT-5.1 o CYGWIN_NT-5.1. (sì, punto alla fine)Makefile: contiene la stringa

necessario confrontare quella data var contiene NT-5.1 posizionato ovunque.

Utilizzare cygwin e vorrebbe essere compatibile con praticamente qualsiasi * nix.

risposta

75

La funzione findstring è ciò che il vostro cuore desidera:

$(findstringtrovare,in)

Ricerche in per un evento di trovare. Se si verifica, il valore è trova; altrimenti, il valore è vuoto. È possibile utilizzare questa funzione in modo condizionale per verificare la presenza di una sottostringa specifica in una determinata stringa. Pertanto, i due esempi,

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

producono i valori "a" e "" (la stringa vuota), rispettivamente. Vedi Testing Flags, per un'applicazione pratica di findstring.

Qualcosa di simile:

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

Grande, esattamente quello che voglio. Solo una domanda - qual è la virgola qui per 'ifneq (, $ (...' – Pablo

+3

Analizzalo come 'ifneq (A, B)' dove A è la stringa vuota e B è '$ (findstring ...)' Sembra strano perché non si citano stringhe nei Makefile. –

+1

È sensibile alla distinzione tra maiuscole e minuscole? Se sì, esiste un modo semplice per eseguire la distinzione tra maiuscole e minuscole? Il manuale non era chiaro ... –

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))" 

Esso corrisponde alla stringa data e restituisce

+4

Questo funziona e leggi è meglio della risposta accettata, IMO. –

Problemi correlati