Opsi Baris Perintah yang Umum Dipakai dalam Compiler GCC

Compiler GCC sangat powerful sekaligus populer digunakan untuk mengkompilasi kode program bahasa C, baik di Linux maupun Windows. Tulisan ini menjelaskan beberapa opsi baris perintah yang umum dipakai dalam compiler GCC.

Contoh Program dengan Kode C

Berikut ini sintaks dasar kode C (main.c) yang dipakai dalam tulisan ini:

#include <stdio.h>
int main(void)
{
   printf("\n The Geek Stuff\n");
   return 0;
}

Opsi compiler GCC

1. Memberi nama file output executable dengan opsi -o

Bentuk umum penggunakan compiler gcc sebagai berikut:

gcc main.c

Perintah di atas untuk meng-compile dan membuat file output executable dengan nama a.out.

Gunakan opsi  -o, seperti contoh di bawah, untuk memberikan nama output untuk file executable-nya.

gcc main.c -o main

Perintah di atas akan membuat file output dengan nama  ‘main’.

2. Aktifkan semua set warning dengan opsi -Wall

Opsi ini akan menampilkan semua warning (peringatan) dalam gcc.

#include<stdio.h>
int main(void)
{
   int i;
   printf("\n The Geek Stuff [%d]\n", i);
   return 0;
}

Jika kode di atas di-compile, warning berikut akan muncul karena variabel yang belum diinisialisasi:

$ gcc -Wall main.c -o main
main.c: In function ‘main’:
main.c:6:10: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

3. Membuat  output preprocessor saja dengan opsi -E

Output pada tahap preprocessing dapat dibuat menggunakan opsi -E.

$ gcc -E main.c > main.i

Perintah di atas membuat output pada stdout sehingga kita dapat me-redirect output dalam sembarang file. Pada contoh di atas, file main.i mengandung output preprocess.

4. Membuat kode assembly saja menggunakan opsi -S

Output pada level assembly dapat dibuat dengan opsi -S.

gcc -S main.c > main.s

Pada contoh di atas, file main.s berisi kode assembly.

5. Membuat kode kompilasi saja menggunakan opsi -C

Untuk membuat kode terkompilasi (tanpa linking), gunakan opsi -C.

gcc -C main.c

Perintah di atas menghasilkan file main.o yang berisi kode level mesin atau kode terkompilasi.

6. Membuat semua file intermediate menggunakan fungsi -save-temps

Opsi -save-temps dapat dilakukan untuk mendapatkan output pada contoh 4, 5, dan 6. Dengan opsi ini, semua output pada tahap kompilasi disimpan pada direktori file yang bersangkutan. Opsi ini menghasilkan file executable juga.

Contoh:

$ gcc -save-temps main.c

$ ls
a.out  main.c  main.i  main.o  main.s

7. Membuat link dengan librari shared menggunakan opsi -l

Opsi -l dapat dipakai untuk membuat link dengan shared library. Contoh:

gcc  -Wall main.c -o main -lCPPfile

Perintah di atas membuat link antara file main.c dengan shared library libCPPfile.so untuk membuat file executable main yang final.

8. Membuat kode independen posisi dengan opsi -fPIC

Ketika membuat shared library, kode independen posisi juga dibuat. Hal ini membantu shared library dipanggil dari sembarang alamat. Pada kasus ini, opsi -fPIC digunakan. Sebagai contoh, perintah berikut ini membuat shared library libCfile.so dari file sumber Cfile.c:

$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o

9. Mencetak semua perintah tereksekusi dengan opsi -v

Opsi  -v bisa digunakan untuk memberi informasi pada semua tahap di mana gcc memproses kompilasi sebuah kode sumber. Contoh:

$ gcc -Wall -v main.c -o main
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
...
...
...

Jadi, kita bisa melihat informasi yang paling detail pada layar.

10. Mengaktifkan dukungan ISO C89 menggunakan opsi -ansi

Dengan opsi -ansi, dukungan ISO C89 diaktifkan. Perhatikan contoh berikut:

#include<stdio.h>
int main(void)
{
  // Print the string
   printf("\n The Geek Stuff\n");
   return 0;
}

Jika kode di atas di-compile dengan opsi -ansi, gcc akan menampilkan error karena bentuk komentar C++ tidak didukung oleh model ISO C89. Jadi, outputnya seperti ini:

$ gcc -Wall -ansi main.c -o main
main.c: In function ‘main’:
main.c:5:3: error: expected expression before ‘/’ token

11. Menginterpretasikan char sebagai char unsigned menggunakan opsi -funsigned-char

Dengan opsi ini, tipe char diperlakukan sebagai tipe unsigned. Contoh:

#include<stdio.h>

int main(void)
{
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Ketika kode di atas di-compile dengan opsi -funsigned-char, outputnya menjadi seperti ini:

$ gcc -Wall -funsigned-char main.c -o main
$ ./main

 The Geek Stuff [246]

Perhatikan nilainya, dari -10 menjadi 246 (unsigned char)

12. Menginterpretasikan char sebagai char signed menggunakan opsi -fsigned-char

Yang ini lawan dari opsi sebelumnya (nomor 11). Contoh dengan kode sumber yang sama dengan sebelumnya, outputnya tetap -10.

$ gcc -Wall -fsigned-char main.c -o main
$ ./main

 The Geek Stuff [-10]

13. Menggunakan macro waktu kompilasi dengan opsi -D

Opsi -D dipakai untuk mendefinisikan macro waktu kompilasi. Contoh:

#include<stdio.h>

int main(void)
{
#ifdef MY_MACRO
  printf("\n Macro defined \n");
#endif
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Opsi -D bisa dipakai untuk mendefinsikan macro MY_MACRO dari command line.

$ gcc -Wall -DMY_MACRO main.c -o main
$ ./main

 Macro defined 

 The Geek Stuff [-10]

Tulisan ‘macro defined’ tercetak menunjukkan bahwa macro MY MACRO telah didefinisikan.

14. Konversi warning jadi error dengan opsi  -Werror

Dengan opsi ini, semua warning berubah menjadi error. Contoh:

#include<stdio.h>

int main(void)
{
  char c;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Kompilasi kode di atas menghasilkan warning terkait dengan variabel c yang belum didefinisikan. Warning dikonversi menjadi error dengan opsi -Werror.

$ gcc -Wall -Werror main.c -o main
main.c: In function ‘main’:
main.c:7:10: error: ‘c’ is used uninitialized in this function [-Werror=uninitialized]
cc1: all warnings being treated as errors

15. Memberi opsi gcc melalui file menggunakan opsi @

Pemberian opsi bisa juga dilakukan melalui file. Caranya dengan menggunakan opsi @ diikuti dengan nama file yang berisi opsi-opsi. Opsi dipisahkan dengan spasi. Contoh:

$ cat opt_file
-Wall -omain

File opt_fileberisi opsi-opsi -Wall dan -omain. Sekarang, compile kode dengan opsi @.

$ gcc main.c @opt_file
main.c: In function ‘main’:
main.c:6:11: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

$ ls main
main

Demikian, semoga ada manfaatnya. Diterjemahkan secara bebas dari sumbernya.

Sumber:

  1. Arora, Himansu. (30 Oktober 2012). 15 Most Frequently Used GCC Compiler Command Line Options. [Online]. Tersedia di: http://www.thegeekstuff.com/2012/10/gcc-compiler-options/
Pos ini dipublikasikan di Developer dan tag , . Tandai permalink.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s