GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara $(CC) dan $CC?

Saya berasumsi bahwa Anda telah melihat $(CC) di Makefile yang berfungsi sebagai perluasan variabel CC , yang biasanya menyimpan nama kompiler C. $(...) sintaks untuk perluasan variabel di Makefiles digunakan setiap kali variabel dengan nama multi-karakter diperluas, sebagai $CC sebaliknya akan diperluas ke nilai variabel C diikuti oleh C literal ($CC pada dasarnya akan sama dengan $(C)C dalam Makefile).

Namun di shell, karena memiliki sintaks yang berbeda, $(CC) adalah substitusi perintah yang akan diganti dengan keluaran menjalankan perintah CC . Jika tidak ada perintah seperti itu di sistem Anda, Anda akan melihat kesalahan "perintah tidak ditemukan".

Anda juga mungkin salah $(CC) untuk ${CC} yang, di shell, setara dengan $CC dalam kebanyakan keadaan. Kurung kurawal hanya diperlukan jika perluasan variabel segera diikuti oleh beberapa string lain yang akan ditafsirkan sebagai bagian dari nama variabel. Contoh perbedaannya bisa dilihat di "$CC_hello" (memperluas variabel yang disebut CC_hello ) dan "${CC}_hello" (memperluas variabel CC dan menambahkan string _hello ke nilainya). Dalam semua keadaan lainnya, ${CC} setara dengan $CC . Perhatikan bahwa penggunaan kurung kurawal tidak mengutip ekspansi, yaitu ${CC} adalah tidak sama dengan "$CC" .

Jika memiliki variabel shell atau lingkungan yang memuat nama kompiler yang Anda gunakan untuk mengompilasi kode C, dan Anda ingin menggunakan variabel tersebut pada baris perintah, maka gunakan "$CC" , atau cukup $CC jika nilai variabel tidak mengandung spasi atau karakter globbing shell.

$CC -o hello.elf hello.c

Keduanya tidak setara. Pada baris yang berisi $(foo) , $(foo) diganti dengan output dari perintah foo . Misalnya:

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

Pada baris yang berisi $foo , $foo diganti dengan nilai variabel bernama foo . Misalnya:


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

Linux
  1. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  2. Apa Perbedaan Antara Git Switch dan Checkout?

  3. Apa perbedaan antara Redhat dan centOS?

  1. Apa perbedaan antara mutex dan bagian kritis?

  2. Apa perbedaan antara utas NPTL dan POSIX?

  3. Apa perbedaan antara `su -` dan` su --login`?

  1. Apa perbedaan antara insmod dan modprobe

  2. Apa perbedaan antara unlink dan rm?

  3. Apa perbedaan antara rute dan rute ip?