Der einfachste Weg, es zu verstehen, besteht darin, eval durch info:
zu ersetzen$(info $(call func, foo, 1.c))
Dadurch wird das Ergebnis der ersten Erweiterung als Ausgabe angezeigt, sodass Sie sehen können, was make tatsächlich analysiert. Sie haben die Werte für die OBJPATH-Variable nicht angegeben, aber wenn es obj
war zum Beispiel ergibt dann in Ihrem Fall die erste Erweiterung (der Aufruffunktion):
tmp = obj/foo
objs += $(tmp)
$(tmp) : 1.c
gcc $^ -o [email protected]
Dann wertet der make-Parser das aus und erweitert es dabei wieder, also Sachen wie $(tmp)
erweitert.
Dies war ein Problem für mich, aber ich habe eine nette Problemumgehung gefunden. In meinem Fall hing es mit der AWS-Docker-Anmeldung zusammen. Ich hatte vorher in meinem Shell-Skript:
eval $(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)
aber wenn man das in Makefile
einfügt es hat nicht funktioniert. Die Problemumgehung hierfür besteht darin, die Zeile zu ändern in:
$$(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)