Funktion und Unterschied zwischen $() und ${} im Makefile
In makefile ${CC} -o myfile myfile.c
und $(CC) -o myfile myfile.c
funktionieren beide gut, auch ohne definition von CC.
Meine Frage ist:
-
Wie zu verwenden $() und ${}?
- Sind Sie einfach konvertieren Sie die Zeichenfolge in {} oder () in Kleinbuchstaben, wenn die Zeichenfolge nicht definiert ist?
- Warum $${dir} muss zwei $$ in
for dir in ${DIR}; do (cd $${dir}; ${MAKE}); done
-
Gibt es Unterschiede zwischen den ${} und der $()?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Vorherige Antwort ist falsch: es gibt keinen Unterschied zwischen
()
und{}
für Stellen.Wenn Sie
$$
in einem Rezept, dann$
ist "geflüchtet" und ging zu der Schale. Die shell kann dann ein Unterschied zwischen$()
oder${}
. Aber das ist völlig bis zu der shell, und hat nichts zu tun mit Machen oder makefiles.In der Rezept-Befehl, den Sie zitieren,
Machen tut:
DIR
für${DIR}
, und das könnte genauso gut gewesen$(DIR)
$$
mit$
("die Flucht", so dass$
weitergegeben werden konnten, um die shell)MAKE
für${MAKE}
wieder dies hätte$(MAKE)
. Der Wert vonMAKE
wird automatisch das setup durch Machen, machen, ausführbare Datei, die verwendet wird.${}
wie Sie will.CC
ähnlichMAKE
ist eine jener Variablen, die standardmäßig vordefinierten Machen lassen, das ist, warum es "funktioniert", auch wenn Sie nicht ihn selbst festlegen.Durch die Art und Weise, eine bessere Art zu schreiben, dieses Rezept für "target" ist
Bitte konsultieren Sie das Handbuch für die Erklärung der Dinge, die unklar sind.
$(foo)
und${foo}
; entweder eine gültige Referenz auf die variablefoo
.