linux 環境下gcc參數詳解

 

 

  1. 以最基本的一個helloworld程序爲例,代碼如下(hello.c):
  2.  
  3. (其實下面這段代碼沒什麼用處...)
  1. #include <stdio.h> 
  2.  
  3. void main() 
  4. int i = 0;
  5.     while(i < 10) 
  6.     { 
  7.         printf("hello world !!\n"); 
  8.  
  9. i++;
  10.     } 
  11.  
  12.     return ; 
  13.  
  14. 最基本的gcc編譯方式爲:
  15.  
  16. gcc -o test hello.c
  17.  
  18. - o 的意思是 指定編譯生成的目標名稱,那麼上面編譯的結果就是產生一個叫做hello的目標文件,
  19.  
  20. 可以通過./hello執行,執行結果是輸出10條hello world。如果沒有-o參數,默認生成的是 .a 類型的文件
  21.  
  22. - c 的作用是:只是編譯而不做鏈接。生成的是.o類型的文件。在大型項目裏面,寫makefile的時候會經常用到
  23.  
  24. 這個選項,先把大量的源文件編譯成.o類型的文件,在最後再鏈接到一起。- c 是無法指定生成的.o文件名稱的。
  25.  
  26. - l 的作用是:包含指定的lib庫文件。比如,在程序中用到了pthread,那麼在編譯的時候必須加上 -lpthread
  27.  
  28. 選項,比如上面的程序,gcc -o test -lpthread hello.c。當然,上面的程序沒有用到pthread,但是依然是
  29.  
  30. 可以編譯通過的。
  31.  
  32. 與- l 配套的是- L選項,-L選項是指定庫文件的路徑,如果是自己生成的lib文件,同時lib文件放在別的目錄底下
  33.  
  34. 的話需要使用這個選項指定包含路徑。
  35.  
  36. - Idir(需要跟單獨的 -I 選項區分) 的作用是:添加一個include文件夾,編譯時,會先去該文件夾查找需要的頭
  37.  
  38. 文件,如果沒有,纔回去系統默認文件夾查找需要的頭文件。
  39.  
  40. 如果要用到gdb調試器的話,那麼有一個選項是必須的,那就是 - g,- g的意思是產生調試信息,當然-ggdb的話,
  41.  
  42. 可能會生成更多gdb可用的調試信息,但其實是-g的一個子參數,如果沒有定義-g選項,那麼是無法使用gdb進行調試
  43.  
  44. 的。
  45. 還有一個編譯選項也是常用的,那就是 -w ,輸出警告信息。gcc在編譯時,有些情況下是不會打印警告信息的,如果想要
  46.  
  47. 看到警告信息,那麼這個參數是必須的。比如gcc -o hello -w hello.c 。
  48.  
  49. 其他的參數,對我來說還不常用,等用到了再補充。

  50.  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章