2014-01-21 12 views
6

Meine Frage betrifft GNU's make.Makefiles: Können 'Dosenrezepte' Parameter haben?

Wenn Sie eine Reihe von Befehlen haben, die als Rezept für mehrere Ziele nützlich sind, ist ein canned recipe nützlich. Ich könnte wie folgt aussehen:

define run-foo 
# Here comes a 
# sequence of commands that are 
# executed line by line 
endef 

Jetzt können Sie die Dosen Rezept wie folgt verwenden:

file1: input1: 
    $(run-foo) 

$(pattern) : sub/% : %.inp 
    $(run-foo) 

und so weiter. Ich frage mich, ob es möglich ist, in Dosen Rezepte (oder so ähnlich), die Parameter übernehmen, zu definieren, so dass ich sie so ausführen kann:

file2: input2 
    $(run-foo) specific-parameter2 "additional" 

file3: input3 
    $(run-foo) another-parameter3 "text" 

Ist das möglich? Irgendwelche Hinweise willkommen :)

Antwort

11

Sie tun dies durch:

  • Verwendung von Parametern $1, $2 ... etc in Ihrem define -ed Makro
  • Aufrufen des Makro über $(call ...)

zB :

define recipe 
echo $1 
endef 

all: t1 t2 

t1: 
    $(call recipe,"One") 

t2: 
    $(call recipe,"Two") 
+1

Die automatische Variablen sind gültig, so dass Ihr Rezept in Dosen steif wie '$ {opts - $ @}' expandieren kann. Natürlich haben Sie vorher "opts-t1" und "opts-t2" definiert. – bobbogo

+0

Zitate sind hier nicht notwendig. – Frug