GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen $(CC) und $CC?

Ich gehe davon aus, dass Sie $(CC) gesehen haben in einem Makefile, wo es als Erweiterung der Variablen CC dient , die normalerweise den Namen des C-Compilers enthält. Die $(...) Syntax für Variablenerweiterungen in Makefiles wird immer dann verwendet, wenn eine Variable mit einem aus mehreren Zeichen bestehenden Namen erweitert wird, als $CC würde ansonsten auf den Wert der Variablen C expandieren gefolgt von einem wörtlichen C ($CC wäre tatsächlich dasselbe wie $(C)C in einem Makefile).

In der Shell jedoch, aufgrund einer anderen Syntax, $(CC) ist eine Befehlsersetzung, die durch die Ausgabe des Befehls CC ersetzt würde . Wenn auf Ihrem System kein solcher Befehl vorhanden ist, wird der Fehler "Befehl nicht gefunden" angezeigt.

Es ist auch möglich, dass Sie $(CC) falsch eingegeben haben für ${CC} was in der Shell äquivalent zu $CC ist unter den meisten Umständen. Die geschweiften Klammern werden nur benötigt, wenn die Expansion der Variablen unmittelbar erfolgt durch eine andere Zeichenfolge, die sonst als Teil des Variablennamens interpretiert würde. Ein Beispiel für den Unterschied ist in "$CC_hello" zu sehen (erweitert die Variable namens CC_hello ) und "${CC}_hello" (erweitert die Variable CC und hängt die Zeichenfolge _hello an zu seinem Wert). Unter allen anderen Umständen ${CC} entspricht $CC . Beachten Sie, dass die Verwendung von geschweiften Klammern nicht ist die Erweiterung angeben, also ${CC} ist nicht dasselbe wie "$CC" .

Wenn Sie eine Shell- oder Umgebungsvariable haben, die den Namen des Compilers enthält, den Sie zum Kompilieren von C-Code verwenden, und Sie diese Variable in der Befehlszeile verwenden möchten, verwenden Sie "$CC" , oder einfach nur $CC wenn der Wert der Variablen keine Leerzeichen oder Shell-Globbing-Zeichen enthält.

$CC -o hello.elf hello.c

Die beiden sind nicht gleichwertig. In einer Zeile, die $(foo) enthält , der $(foo) wird durch die Ausgabe des Befehls foo ersetzt . Zum Beispiel:

$ echo "hello $(echo world)"
hello world

In einer Zeile, die $foo enthält , der $foo wird durch den Wert der Variablen mit dem Namen foo ersetzt . Zum Beispiel:


$ foo=world
$ echo "hello $foo"
hello world

Linux
  1. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  2. Was ist der Unterschied zwischen Git Switch und Checkout?

  3. Was ist der Unterschied zwischen Redhat und CentOS?

  4. Was ist der Unterschied zwischen strtok_r und strtok_s in C?

  5. Was ist der Unterschied zwischen fsck und e2fsck?

Was ist der Unterschied zwischen InnoDB und MyISAM?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?