Wenn ich Make-Datei von android build/Kern/definitions.mk Funktion collapse-Paare lesen, fand ich, ich kann nicht die Logik der Raum Prozesse unter verstehen:Makefile, warum Leerzeichen in einer Zeichenfolge zusammengeführt wurden?
define collapse-pairs
$(eval _cpSEP := $(strip $(if $(2),$(2),=)))\
$(subst $(space)$(_cpSEP)$(space),$(_cpSEP),$(strip \
$(subst $(_cpSEP), $(_cpSEP) ,$(1))))
endef
bei
$(subst $(_cpSEP), $(_cpSEP) ,$(1))
„a = b "sollte geändert werden in " a = < 2 Leerzeichen> b ", dann unter$(subst $(space)$(_cpSEP)$(space),$(_cpSEP),...)
, sollte es wieder ersetzt werden. aber tatsächlich, es wird "a = b", sieht zwei Leerzeichen in der Zeichenfolge wurden automatisch zusammengeführt .
Während der Untersuchung fand ich Merkwürdige folgende:
$ cat test-1.mk
something:="a =b c= d e = f"
$(info $(something))
all:
@echo "something:${something}"
$ make -f test-1.mk
"a =b c= d e = f"
something:a =b c= d e = f
Wie machen diese Räume Prozess? Warum wurden sie zusammengelegt?
Wie fast immer scheint der Fall zu sein, wieder einmal jemand kritische Informationen von sich selbst zu verstecken. Das erste, was Sie immer tun sollten, wenn Sie nicht verstehen, wie ein Rezept in make funktioniert, ist _Remove das '@' von der Kommandozeile_. Noch besser wäre es, sie nicht in erster Linie hinzuzufügen, zumindest bis Ihr Makefile ordnungsgemäß funktioniert. Make wird Ihnen _exactly_ zeigen, welchen Befehl es aufrufen wird, wenn Sie es zulassen, und wenn Sie das untersuchen, wird es Ihnen oft zeigen, wo Ihr Problem ist. – MadScientist
Danke! Entfernen Sie "@" kann die Dinge klar machen. aber um oben Skript zu machen, wie subst Verhalten zu erklären? – PhilipW
Sorry, aber ich verstehe die Frage "Subst Behaviour" nicht. Ich werde sagen, dass Leerzeichen _after_ Kommas generell durch make entfernt werden, während Leerzeichen nach einem Argument und vor dem Komma im Argument erhalten bleiben. Vielleicht würde das deine Frage beantworten; wenn nicht, müssen Sie es neu schreiben, um es klarer zu machen (für mich jedenfalls). – MadScientist