GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi $(CC) a $CC?

Předpokládám, že jste viděli $(CC) v Makefile, kde slouží jako rozšíření proměnné CC , který normálně nese název kompilátoru C. $(...) syntaxe pro rozšíření proměnných v Makefiles se používá vždy, když je rozbalena proměnná s víceznakovým názvem, jako $CC by jinak expandoval na hodnotu proměnné C následovaný doslovným C ($CC by ve skutečnosti bylo stejné jako $(C)C v souboru Makefile).

V shellu však kvůli jiné syntaxi $(CC) je náhrada příkazu, která by byla nahrazena výstupem spuštění příkazu CC . Pokud ve vašem systému žádný takový příkaz není, zobrazí se chyba „příkaz nenalezen“.

Je také možné, že jste si spletli $(CC) pro ${CC} což je v shellu ekvivalentní $CC za většiny okolností. Složené závorky jsou potřeba pouze v případě, že je expanze proměnné sledována okamžitě nějakým jiným řetězcem, který by jinak byl interpretován jako součást názvu proměnné. Příklad rozdílu lze vidět v "$CC_hello" (rozšíří proměnnou nazvanou CC_hello ) a "${CC}_hello" (rozšíří proměnnou CC a připojí řetězec _hello na jeho hodnotu). Za všech ostatních okolností ${CC} je ekvivalentní $CC . Upozorňujeme, že použití složených závorek není citovat rozšíření, tj. ${CC} není stejně jako "$CC" .

Pokud máte shell nebo proměnnou prostředí obsahující název kompilátoru, který používáte pro kompilaci kódu C, a chcete tuto proměnnou použít na příkazovém řádku, použijte "$CC" , nebo jen $CC pokud hodnota proměnné neobsahuje mezery nebo globovací znaky.

$CC -o hello.elf hello.c

Ti dva nejsou ekvivalentní. V řádku, který obsahuje $(foo) , $(foo) je nahrazeno výstupem příkazu foo . Například:

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

V řádku, který obsahuje $foo , $foo je nahrazena hodnotou proměnné s názvem foo . Například:


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

Linux
  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Jaký je rozdíl mezi insmod a modprobe

  3. Jaký je rozdíl mezi ls a l?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi Redhat a centOS?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Jaký je rozdíl mezi mutexem a kritickou sekcí?

  2. Jaký je rozdíl mezi vlákny NPTL a POSIX?

  3. Jaký je rozdíl mezi strtok_r a strtok_s v C?