2009-08-24 1 views
1

J'ai des motifs de recherche qui ne correspondent pas bien à un nom de fichier pour le résultat. Je divise donc l'expression régulière et la partie correspondante du nom de fichier en deux variables différentes comme ci-dessous. Comment puis-je automatiser les éléments suivants afin de ne pas avoir à lister manuellement les fichiers pour ALL et ne pas avoir à entrer manuellement les règles exécutant grep?Automatiser des règles dans le fichier makefile à partir de deux variables en même temps

SEARCH_RE = test a/b/c a.*b 
SEARCH_FILE = test abc ab 

ALL = result.test result.abc result.ab 

all: $(ALL) 

result.test: 
     grep test inputfile > result.test 

result.abc: 
     grep a/b/c inputfile > result.abc 

result.ab 
     grep a.*b inputfile > result.ab 

Répondre

1

Je recommande

 
ALL = $(addprefix result.,$(SEARCH_FILE)) 

En ce qui concerne l'écriture des règles, le genre de lookup je pense que vous voulez peut être fait dans Make, mais ne devrait vraiment pas être - ce serait un horrible kludge. Je suggère de le faire de cette façon:

 
result.test: TARG = test 
result.abc: TARG = a/b/c 
result.ab: TARG = a.*b 

$(ALL): 
    grep $(TARG) inputfile > [email protected] 
+0

Bien que n'étant pas aussi complètement automatisé que je l'espérais, c'est au moins beaucoup mieux que d'avoir des règles en double. Je vous remercie. – hlovdal

1

Je ne sais pas comment créer les règles, mais la cible ALL est assez facile:

ALL = $(patsubst %,result.%,$(SEARCH_FILE)) 
+0

Bonne. J'ai également trouvé que "ALL = $ (foreach file, $ (SEARCH_FILE), résultat. $ (Fichier))" fonctionne. – hlovdal