2017-09-21 3 views
0

Je tente de faire fonctionner correctement l'instruction de filtre suivante, mais ce n'est pas le cas. exportedLibaries contient le chemin par rapport aux fichiers d'où le rendre en cours d'exécution à partir (c.-à-export/*/*/*/filename)Les caractères génériques de filtre ne se comportent pas de la même manière ou comme prévu

dev := $(filter HelloWorld%, $(exportedLibraries)) 

J'utilise un filtre similaire pour mes tests unitaires et il fonctionne à merveille (avec le chemin relatif étant la même):

unitTests := $(filter %_Test, $(exportedUnitTests)) 

Cela fonctionne cependant ...

dev := $(filter $(wildcard export/**/**/**/HelloWorld*), $(exportedLibraries)) 

Qu'est-ce que je fais mal?

+0

Si votre explication est correcte, le premier filtre ne fonctionnera pas car dans $ (exportedLibraries), les noms contiennent le chemin commençant par 'export /' mais votre modèle est sans préfixe ('HelloWorld%'). – Vroomfondel

+0

Dans le deuxième filtre, $ (exportedUnitTests) contient également le chemin commençant par l'exportation – ILostMySpoon

+0

Oui, mais je parle du premier argument de $ filter, qui est 'HelloWorld%' (aucun chemin) dans le cas non fonctionnel et 'export/whatever/nother/onemore/HelloWorldxyz' dans l'autre cas. – Vroomfondel

Répondre

2

$ (notDIR) est ce que vous voulez dans ce cas:

exportedLibraries := export/foo/helloworld.lib export/bar/HelloWorld.lib export/baz/HelloWorldTwo.lib 

dev := $(foreach lib,$(exportedLibraries),$(if $(filter HelloWorld%,$(notdir $(lib))),$(lib))) 

$(info $(dev)) 

Vous pouvez $(strip) le résultat de la $(foreach) pour se débarrasser des espaces excédentaires du résultat.