2010-12-14 63 views
2

Expliqué dans le code Makefile ...Pourquoi * /%/x ne correspond-il pas à a/b/x dans un Makefile?

PATH = a/b/x 
$(patsubst a/%/x,%,$(PATH)) # => b 
$(patsubst */%/x,%,$(PATH)) # => a/b/x 

Il semble que ces deux devrait produire le même résultat, b, comme * doit correspondre à quelque chose. Pourquoi n'est-ce pas le cas? Comment écrire une expression pour capturer le terme central avec un préfixe, pas seulement 'a'?

+0

En passant, j'aimerais ré-exprimer ce titre en quelque sorte. Suggestions bienvenues. –

Répondre

2

Faire simplement n'a pas une très bonne capacité à gérer les caractères génériques. Votre $(patsubst */%/x,%,$(PATH)) ne fonctionne pas car il n'y a pas * dans votre $(PATH). Mais vous pouvez obtenir l'effet que vous voulez avec ce kludge:

$(word 2, $(subst /, ,$(PATH)))