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
undbar: echo flags are $(MAKEFLAGS), BAR is $(BAR)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht setzen
MAKEFLAGS
überhaupt. Warum wollen Sie das? Sie hat nicht irgendeinen Grund geben, dies zu tun.MAKEFLAGS
ist bestimmt, wirklich zu werden, eine interne Umsetzung die Weitergabe von Argumenten von einem Elternteil zu einem Kind machen. Es ist nicht beabsichtigt, in der Regel, die geändert werden, indem ein makefile. Das einzige, was Sie sinnvoll tun, um es hinzuzufügen, neue Fahnen.Wenn Sie gerade ausführen der rekursiven über die
$(MAKE)
variable statt hardcodingmake
ist, wird es Nur Funktionieren:oder was auch immer.
MAKEFLAGS
, ich will nur Sie zu Arbeit. Dein Beispiel verliert die Variablen, die übergeben wurden, auf top-Niveau machen. Ich brauche, um Benutzer zu erlauben, um die Konfiguration von Variablen und sub-makefiles auf Sie zu reagieren.export
.Um zu prüfen, ob -B ist derzeit in Anfertigung von Fahnen, die ich tun :