GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra $(CC) e $CC?

Suppongo che tu abbia visto $(CC) in un Makefile dove funge da espansione della variabile CC , che normalmente contiene il nome del compilatore C. Il $(...) la sintassi per le espansioni delle variabili nei Makefile viene utilizzata ogni volta che una variabile con un nome composto da più caratteri viene espansa, come $CC altrimenti si espanderebbe al valore della variabile C seguito da un letterale C ($CC sarebbe in effetti lo stesso di $(C)C in un Makefile).

Nella shell però, a causa della diversa sintassi, $(CC) è una sostituzione di comando che verrebbe sostituita dall'output dell'esecuzione del comando CC . Se non c'è tale comando sul tuo sistema, vedresti un errore "comando non trovato".

È anche possibile che tu abbia sbagliato $(CC) per ${CC} che, nella shell, equivale a $CC nella maggior parte delle circostanze. Le parentesi graffe sono necessarie solo se l'espansione della variabile viene seguita immediatamente da un'altra stringa che verrebbe altrimenti interpretata come parte del nome della variabile. Un esempio della differenza può essere visto in "$CC_hello" (espande la variabile chiamata CC_hello ) e "${CC}_hello" (espande la variabile CC e aggiunge la stringa _hello al suo valore). In tutte le altre circostanze, ${CC} equivale a $CC . Tieni presente che l'uso delle parentesi graffe non è citando l'espansione, cioè ${CC} non lo stesso di "$CC" .

Se hai una shell o una variabile d'ambiente che contiene il nome del compilatore che stai usando per compilare il codice C, e vuoi usare quella variabile sulla riga di comando, allora usa "$CC" , o semplicemente $CC se il valore della variabile non contiene spazi o caratteri di shell globbing.

$CC -o hello.elf hello.c

I due non sono equivalenti. In una riga che contiene $(foo) , il $(foo) è sostituito con l'output del comando foo . Ad esempio:

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

In una riga che contiene $foo , il $foo viene sostituito con il valore della variabile denominata foo . Ad esempio:


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

Linux
  1. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  2. Qual è la differenza tra Redhat e centOS?

  3. Qual è la differenza tra mutex e sezione critica?

  4. Qual è la differenza tra thread NPTL e POSIX?

  5. Qual è la differenza tra strtok_r e strtok_s in C?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Qual è la differenza tra il comando apt e apt-get?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è la differenza tra ls e l?