Gemäß GNU Make Official Doc:
Variablen- und Funktionsreferenzen in Rezepten haben dieselbe Syntax und Semantik wie Referenzen an anderer Stelle im Makefile. Sie haben auch die gleichen Zitierregeln:Wenn Sie möchten, dass ein Dollarzeichen in Ihrem Rezept erscheint, müssen Sie es verdoppeln („$$“). Bei Shells wie der Standard-Shell, die Dollarzeichen verwenden, um Variablen einzuführen, ist es wichtig, sich klar zu machen, ob die Variable, auf die Sie verweisen möchten, eine make-Variable (verwenden Sie ein einzelnes Dollarzeichen) oder eine Shell-Variable (verwenden Sie zwei Dollarzeichen) ist /P>
Also kurz:
- Makefile-Variable => ein einzelnes Dollarzeichen verwenden
- Shell-Variable => zwei Dollarzeichen verwenden
$$ ist die PID Ihres aktuellen Prozesses.
$ 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
Auf dieses Beispiel nicht direkt anwendbar -- außer wenn der gezeigte Code über $(shell ...)
ausgeführt wird anstatt eine Regel zu sein:
Wenn die sekundäre Erweiterung aktiviert ist, interpretiert make möglicherweise auch den doppelten Dollar selbst in der zweiten Verarbeitungsphase, wenn er in der Liste der Voraussetzungen vorkommt. (Erste Phase:Datei lesen, Variablen setzen; zweite Phase:Abhängigkeitsziele finden und aufrufen, Regeln ausführen)
Dies wird verwendet, um die dynamische Angabe von Abhängigkeitszielen zu ermöglichen, wenn die Variable mit dem Zielnamen erst später in der Datei verfügbar ist.
Siehe https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.