Rekursive machen: der richtige Weg zu legen `$(MAKEFLAGS)`

Wie kann ich $(MAKEFLAGS) (oder eine andere Art der übergabe von Variablen definiert, auf die Befehlszeile zu sub-stellen) in einer Weise, die den Aufruf von der shell mit beiden make VAR=val und make -args?

Muss ich meinen Teilprojekte konfigurierbar, aber ich hasse es, autotools, so bin ich mit Hilfe von make-Variablen für diese, z.B. das aufrufen von shell:

$ make USE_SSE3=1

sowie USE_SSE3 muss gelten für alle builds in allen sub-makefiles.

Das Handbuch besagt, dass:

wenn Sie 'make-ks' dann MAKEFLAGS wird der Wert von 'ks'.

Daher bin ich mit -$(MAKEFLAGS) (mit einem Bindestrich Präfix) in meinem Makefile.

Jedoch, dass expandiert ungültige Argumente bei Variablen mit nicht-flags werden verwendet,. Wenn ich laufen:

$ make FOO=bar

dann sub-machen Sie ungültig wird -FOO=bar. OTOH, ohne das Armaturenbrett Präfix Variablen-Definitionen arbeiten, dann aber make -s usw. nicht.

Gibt es einen syntax/variable/hack, macht die übergabe von Argumenten und lone Variablen-Definitionen arbeiten mit sub-makefiles?

Legacy $(MKFLAGS) nicht die komische dash-prefix problem, aber es beinhaltet nicht die Definitionen der Variablen entweder. Ich habe versucht Festsetzung der Variablen mit $(patsubst), aber das nur machte alles noch schlimmer durch abschneiden von whitespace.

Ich brauche die Lösung, um die Kompatibilität mit der veralteten GNU Make 3.81 im Lieferumfang von Mac OS X Mavericks.


foo:
    $(MAKE) -C subproject -$(MAKEFLAGS)

$ make foo -s       # MAKEFLAGS = 's'
$ make foo BAR=baz  # MAKEFLAGS = 'BAR=baz'
$ make foo -j8      # MAKEFLAGS = ' --job-server=…'
  • Dies scheint zu arbeiten, ohne besonderen Aufwand. Versuchen foo: $(MAKE) bar und bar: echo flags are $(MAKEFLAGS), BAR is $(BAR).
InformationsquelleAutor Kornel | 2013-10-26
Schreibe einen Kommentar