2010-06-09 4 views
3

Je me demande comment faire correspondre l'occurrence exacte d'un mot donné dans la liste de mots donnée en utilisant uniquement des opérations de fichier makefile standard. Dans l'exemple ci-dessous pour WORD_TO_MATCH = a, le résultat est positif et apparemment faux.Comment faire correspondre l'occurrence de mot dans la liste dans le fichier makefile

INPUT_LIST= aa bb 

WORD_TO_MATCH = aa 
#WORD_TO_MATCH = a 

ifneq ($(findstring $(WORD_TO_MATCH),$(INPUT_LIST)),) 
    $(warning List contains "$(WORD_TO_MATCH)") 
else 
    $(warning List doesnt contain "$(WORD_TO_MATCH)") 
endif 

Répondre

7

Utiliser un filtre au lieu defindString:

... 
ifneq ($(filter $(WORD_TO_MATCH),$(INPUT_LIST)),) 
    $(warning List contains "$(WORD_TO_MATCH)") 
... 
+0

Et maintenant, une tâche bonus - '$ (filtre ...)' la liste sur une sous-chaîne (non correspondance exacte de la mot, mais des mots contenant - attendez-le - la racine d'une règle de modèle, pour spécifier ses dépendances Où je veux dire quelque chose comme: 'target_dir /%. o: $ (filter , $ (LIST_OF_SOURCES_IN_DIFFERENT_DIRS))', et dans la règle a '% ^' retourner les bons fichiers ... Je pense à faire une question, mais cette serait difficile. (BTW, j'ai entendu parler de '.SECONDEXPANSION', mais il est pratiquement non documenté). –