Nejjednodušší způsob, jak to pochopit, je nahradit eval info:
$(info $(call func, foo, 1.c))
To zobrazí jako výstup výsledek prvního rozšíření, takže můžete vidět, jaká značka bude ve skutečnosti analyzovat. Nezadali jste hodnoty pro proměnnou OBJPATH, ale pokud to bylo obj
například ve vašem případě má první rozšíření (funkce volání) za následek:
tmp = obj/foo
objs += $(tmp)
$(tmp) : 1.c
gcc $^ -o [email protected]
Pak to analyzátor make vyhodnotí a během procesu to znovu rozšíří, takže věci jako $(tmp)
jsou rozšířeny.
Byl to pro mě problém, ale našel jsem pěkné řešení. V mém případě to souviselo s přihlášením AWS docker. Dříve jsem měl ve skriptu shellu:
eval $(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)
ale když to vložíte do Makefile
nefungovalo to. Řešením je změnit řádek na:
$$(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)