Podle gnu vytvořte oficiální dokument:
Odkazy na proměnné a funkce v receptech mají stejnou syntaxi a sémantiku jako odkazy jinde v makefile. Mají také stejná pravidla pro citování:pokud chcete, aby se ve vašem receptu objevil znak dolaru, musíte jej zdvojnásobit („$$“). U shellů, jako je výchozí shell, který k zavádění proměnných používá znaky dolaru, je důležité mít v mysli jasno, zda proměnná, na kterou chcete odkazovat, je proměnná amake (použijte jeden znak dolaru) nebo proměnná shellu (použijte znaky dvoudolarů).
Takže ve zkratce:
- proměnná makefile => použijte jeden znak dolaru
- proměnná shellu => použijte dva znaky dolaru
$$ je PID vašeho aktuálního procesu.
$ ps -ef|grep $$
user 208465 200620 0 10:30 pts/4 00:00:00 bash
$ for number in 1 2 3 4 ; do \
echo $$number ; \
done
208465number
208465number
208465number
208465number
Na tento příklad se přímo nevztahuje – kromě případů, kdy je zobrazený kód spuštěn prostřednictvím $(shell ...)
místo toho, aby to bylo pravidlo:
S povolenou sekundární expanzí může make také interpretovat samotný dvojitý dolar ve druhé fázi zpracování, když se objeví v seznamu požadavků. (První fáze:čtení souboru, nastavení proměnných; druhá fáze:nalezení a vyvolání cílů závislosti, spuštění pravidel)
To se používá k umožnění dynamického zadávání cílů závislosti, když je proměnná s názvem cílů k dispozici až později v souboru.
Viz https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.