Wie kann ich $(MAKEFLAGS)
(oder eine andere Art der Weitergabe von Variablen in der Befehlszeile zu sub-make) auf eine Weise, die den Aufruf von Shell mit make VAR=val
und unterstützt make -args
?
Ich brauche meine Teilprojekte konfigurierbar, aber ich hasse Autotools, also verwende ich Make-Variablen dafür, z. Aufrufen von Shell:
$ make USE_SSE3=1
und USE_SSE3
Bedürfnisse alle anzuwenden baut sich in allen Teilmakefiles.
The manual heißt es:
, wenn Sie ‚make -ks‘ dann MAKEFLAGS der Wert ‚ks‘ bekommt.
Daher verwende ich -$(MAKEFLAGS)
(mit einem Strich Präfix) in meinem Makefile.
Allerdings wird in ungültige Argumente erweitert, wenn Variablen ohne Flag verwendet werden. Wenn ich laufen:
$ make FOO=bar
dann sub-make wird ungültig -FOO=bar
. OTOH ohne die Präfix-Variablen-Definitionen arbeiten, dann aber make -s
, etc. nicht.
Gibt es eine Syntax/Variable/Hack, die die Übergabe von Argumenten und einzelne Variablen-Definitionen mit Sub-Makefiles funktioniert?
Das Legacy $(MKFLAGS)
hat nicht das seltsame Bindestrich-Präfix-Problem, aber es enthält auch keine Variablendefinitionen. Ich habe versucht, die Variable mit $(patsubst)
zu beheben, aber das machte nur die Dinge schlechter, indem Sie Whitespace trimmen.
Ich brauche die Lösung, um mit dem veralteten GNU Make 3.81 kompatibel zu sein, das mit Mac OS X Mavericks ausgeliefert wird.
foo:
$(MAKE) -C subproject -$(MAKEFLAGS)
$ make foo -s # MAKEFLAGS = 's'
$ make foo BAR=baz # MAKEFLAGS = 'BAR=baz'
$ make foo -j8 # MAKEFLAGS = ' --job-server=…'
Dies ohne besonderen Aufwand zu funktionieren scheint. Probieren Sie 'foo: $ (MAKE) bar' und' bar: echo flags sind $ (MAKEFLAGS), BAR ist $ (BAR) '. – Beta