GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la diferencia entre $(CC) y $CC?

Supongo que has visto $(CC) en un Makefile donde sirve como una expansión de la variable CC , que normalmente lleva el nombre del compilador de C. El $(...) La sintaxis para expansiones de variables en Makefiles se usa siempre que se expande una variable con un nombre de varios caracteres, como $CC de lo contrario, se expandiría al valor de la variable C seguido de un literal C ($CC sería en efecto lo mismo que $(C)C en un Makefile).

Sin embargo, en el shell, debido a que tiene una sintaxis diferente, $(CC) es una sustitución de comando que sería reemplazada por el resultado de ejecutar el comando CC . Si no existe tal comando en su sistema, verá un error de "comando no encontrado".

También es posible que te hayas equivocado $(CC) para ${CC} que, en el shell, es equivalente a $CC en la mayoría de las circunstancias. Las llaves solo son necesarias si la expansión de la variable se sigue inmediatamente por alguna otra cadena que de otro modo se interpretaría como parte del nombre de la variable. Un ejemplo de la diferencia se puede ver en "$CC_hello" (expande la variable llamada CC_hello ) y "${CC}_hello" (expande la variable CC y agrega la cadena _hello a su valor). En todas las demás circunstancias, ${CC} es equivalente a $CC . Tenga en cuenta que el uso de llaves no citando la expansión, es decir, ${CC} es no lo mismo que "$CC" .

Si tiene una variable de entorno o shell que contiene el nombre del compilador que está usando para compilar el código C y desea usar esa variable en la línea de comando, use "$CC" , o simplemente $CC si el valor de la variable no contiene espacios o caracteres de concha.

$CC -o hello.elf hello.c

Los dos no son equivalentes. En una línea que contiene $(foo) , el $(foo) se reemplaza con la salida del comando foo . Por ejemplo:

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

En una línea que contiene $foo , el $foo se reemplaza con el valor de la variable llamada foo . Por ejemplo:


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

Linux
  1. ¿Cuál es la diferencia entre insmod y modprobe?

  2. ¿Cuál es la diferencia entre mutex y sección crítica?

  3. ¿Cuál es la diferencia entre los hilos NPTL y POSIX?

  4. ¿Cuál es la diferencia entre fsck y e2fsck?

  5. ¿Cuál es la diferencia entre adduser y useradd?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?

¿Cuál es la diferencia entre `su -` y `su --login`?