1. 程式人生 > >Makefile之 cc編譯命令選項

Makefile之 cc編譯命令選項

多數UNIX平臺都通過CC呼叫它們的C編譯程式.除標準和CC以外,LINUX和FREEBSD還支援gcc.
基本的編譯命令有以下幾種:
 -c     編譯產生物件檔案(*.obj)而不連結成可執行檔案,當編譯幾個獨立的模組,而待以後由連結程式把它們連結在一起時,就可以使用這個選項,如: 
             $cc -c hello.c ===> hello.o
             $cc hello.o
    2.  -o     允許使用者指定輸出檔名,如
            $cc hello.c -o hello.o
            or
            $cc hello.c -o hello

    3.  -g    指明編譯程式在編譯的輸出中應產生除錯資訊.這個除錯資訊使原始碼和變數名引用在除錯程式中或者當程式異常退出後在分析core檔案時可被使用.
   4.   -D   允許從編譯程式命令列定義巨集符號
        一共有兩種情況:一種是用-DMACRO,相當於在程式中使用#define MACRO,另一種是用-DMACRO=A,相當於程式中的#define MACRO A.如對下面這程式碼:
          #ifdefine DEBUG
                    printf("debug message\n");
         #endif
       編譯時可加上-DDEBUG引數,執行程式則打印出編譯資訊

   5.   -I   可指定查詢include檔案的其他位置.例如,如果有些include檔案位於比較特殊的地方,比如/usr/local/include,就可以增加此選項如下:
        $cc -c -I/usr/local/include -I/opt/include hello.c 此時目錄搜尋會按給出的次序進行.
  6. -E   這個選項是相對標準的,它允許修改命令列以使編譯程式把預先處理的C檔案發到標準輸出,而不實際編譯程式碼.在檢視C預處理偽指令和C巨集時,這是很有用的.可能的編譯輸出可重新定向到一個檔案,然後用編輯程式來分析:
      $cc -c -E hello.c >cpp.out       此命令使include檔案和程式被預先處理並重定向到檔案cpp.out.以後可以用編輯程式或者分頁命令分析這個檔案,並確定最終的C語言程式碼看起來如何.

  7. -o   優化選項,     這個選項不是標準的
          -O和 -O1指定1級優化
         -O2 指定2級優化
        -O3 指定3級優化
        -O0指定不優化
      $cc -c O3 -O0 hello.c  當出現多個優化時,以最後一個為準!!
   8. -Wall  以最高級別使用GNU編譯程式,專門用於顯示警告用!!
      $gcc -Wall hello.c
   9.   -L指定連線庫的搜尋目錄,-l(小寫L)指定連線庫的名字
      $gcc main.o -L/usr/lib -lqt -o hello
     上面的命令把目標檔案main.o與庫qt相連線,連線時會到/usr/lib查詢這個庫檔案.也就是說-L與-l一般要成對出現.