2016-06-07 5 views
1

Bedingungen:Pass Dateiargument durch Kind machen

  • eine Make-Datei an den make übergeben wird: make -f ../makefile hi
  • das hi Ziel auch make

nennt Ich brauche einen Weg, um den Wert zu propagieren von -f zu dem Sub-Make-Befehl, der innerhalb hi ausgeführt wird.

bye: 
    echo 'whatever' 

hi: 
    ${MAKE} bye 
+0

Also statt hart codieren "hi" möchten Sie weitergeben, was von der Befehlszeile übergeben wurde? Aber wenn das Make-Ziel sagt, was ausgeführt werden soll, weiß 'hi' bereits, dass es' hi' ausführt; Wie könnte es nicht sein? Vielleicht könntest du klären, was du gerade bekommst und was du stattdessen bekommen möchtest. – tripleee

Antwort

0

Die einzige Möglichkeit, die ich bewusst bin, ist die MAKEFILE_LIST Variable zu verwenden:

CURR_MAKEFILE:=$(lastword $(MAKEFILE_LIST)) 

bye: 
    echo 'whatever' 

hi: 
    +$(MAKE) -f $(CURR_MAKEFILE) bye 

Aber beachten Sie, wie es in der offiziellen Dokumentation geschrieben, dass die variablen Datensätze alle geparsten Makefiles, einschließlich die include ed. Der Wert der Variablen ist nur dann zuverlässig, wenn sie ganz oben im Makefile abgefragt wird, bevor sie eingeschlossen wird.

0

Vorausgesetzt, es gibt keine Standard-Make-Datei im aktuellen Verzeichnis (vermutlich der Grund, warum Sie -f ../makefile sind vorbei), dann Ihr Beispiel ../makefile funktioniert, wie es ist, wenn Sie aufrufen make wie:

$ make MAKEFILES=../makefile hi 
make bye 
make[1]: Entering directory '/home/imk/develop/scrap' 
echo 'whatever' 
whatever 
make[1]: Leaving directory '/home/imk/develop/scrap' 

Siehe 3.4 The Variable MAKEFILES

Wenn es ist eine Standard-Make-Datei im aktuellen Verzeichnis dann dieser Ansatz Caus e make, um das Standard-Makefile zu lesen, nachdem es gelesen hat ../makefile, mit unguten Ergebnissen. In diesem Fall bevorzugen Sie die Antwort von @ Dummy00001.