GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la différence entre $(CC) et $CC ?

Je suppose que vous avez vu $(CC) dans un Makefile où il sert d'expansion de la variable CC , qui contient normalement le nom du compilateur C. Le $(...) la syntaxe pour les extensions de variables dans Makefiles est utilisée chaque fois qu'une variable avec un nom à plusieurs caractères est développée, comme $CC serait autrement étendu à la valeur de la variable C suivi d'un C littéral ($CC serait en fait le même que $(C)C dans un Makefile).

Dans le shell cependant, en raison d'une syntaxe différente, $(CC) est une substitution de commande qui serait remplacée par la sortie de l'exécution de la commande CC . S'il n'y a pas une telle commande sur votre système, vous verrez une erreur "commande introuvable".

Il est également possible que vous vous soyez trompé de $(CC) pour ${CC} qui, dans le shell, équivaut à $CC dans la plupart des circonstances. Les accolades ne sont nécessaires que si le développement de la variable est suivi immédiatement par une autre chaîne qui serait autrement interprétée comme faisant partie du nom de la variable. Un exemple de la différence peut être vu dans "$CC_hello" (développe la variable appelée CC_hello ) et "${CC}_hello" (développe la variable CC et ajoute la chaîne _hello à sa valeur). Dans toutes les autres circonstances, ${CC} est équivalent à $CC . Notez que l'utilisation d'accolades n'est pas en citant l'expansion, c'est-à-dire ${CC} n'est pas identique à "$CC" .

Si vous avez un shell ou une variable d'environnement contenant le nom du compilateur que vous utilisez pour compiler le code C, et que vous souhaitez utiliser cette variable sur la ligne de commande, utilisez alors "$CC" , ou juste $CC si la valeur de la variable ne contient pas d'espaces ou de caractères globaux de shell.

$CC -o hello.elf hello.c

Les deux ne sont pas équivalents. Dans une ligne contenant $(foo) , le $(foo) est remplacé par la sortie de la commande foo . Par exemple :

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

Dans une ligne contenant $foo , le $foo est remplacé par la valeur de la variable nommée foo . Par exemple :


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

Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. Quelle est la différence entre le mutex et la section critique ?

  3. Quelle est la différence entre les threads NPTL et POSIX ?

  4. Quelle est la différence entre fsck et e2fsck ?

  5. Quelle est la différence entre la route et la route IP ?

Quelle est la différence entre InnoDB et MyISAM ?

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?