2010-04-30 5 views
45
contient la chaîne A

rendements variables MINGW32_NT-5.1 ou CYGWIN_NT-5.1. (oui, point à la fin)Makefile:

besoin de comparer cette donnée var contient NT-5.1 positionné n'importe où. Utiliser cygwin et aimerait être compatible avec presque tous les * nix.

Répondre

75

La fonction findstring est ce que votre cœur désire:

$(findstringtrouver,dans)

Recherches à pour une occurrence de trouver. Si cela se produit, la valeur est find; sinon, la valeur est vide. Vous pouvez utiliser cette fonction dans un conditionnel pour tester la présence d'une sous-chaîne spécifique dans une chaîne donnée. Ainsi, les deux exemples,

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

produisent les valeurs "a" et "" (la chaîne vide), respectivement. Voir Testing Flags, pour une application pratique de findstring.

Quelque chose comme:

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

Grand, exactement ce que je veux. Juste une question - quelle est la virgule ici pour 'ifneq (, $ (...' – Pablo

+3

Analyser comme 'ifneq (A, B)' où A est la chaîne vide et B est '$ (findstring ...)' Cela semble étrange parce que vous ne citez pas les chaînes dans Makefiles –

+1

Est-ce que 'findstring' est sensible à la casse? Si oui, y a-t-il un moyen simple de faire la correspondance insensible à la casse? ... –

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

Il correspond à la chaîne et retourne

+4

et lis s mieux que la réponse acceptée, OMI. –