-x language filename
設定檔案所使用的語言,而不是以後綴識別語言
-x none filename
關掉上個選項的語言設定,使用檔案的字尾識別語言
-c對檔案進行預處理、編譯和彙編,生成obj檔案
gcc -c hello.c-c
在預處理的時候,不刪除注釋資訊,一般用於分析程式
-s只進行預處理和編譯,生成彙編**
gcc -s hello.c-e
只進行預處理,這個選項不生成檔案,可以使用重定向或者-o選項使其生成乙個檔案
gcc -e hello.c -o hello.i-o
制定目標的名稱,預設為a.out
gcc -o hello hello.c-ansi
關閉gnu c中與ansi c不相容的特性,啟用ansi c的專有特性
-include file
包含某個**,相當於在**中使用#include
gcc hello.c -include /usr/lib/hello.h-imacros file
將file中的巨集加入到輸入檔案中
-dmarco
相當於#define macro
-dmarco=defn
相當於#define macro=defn
-umacro
相當於#undef macro
-idir
對於#include「filename",gcc/g++會先在當前目錄查詢標頭檔案,如果沒有找到則回到預設的頭檔案目錄找。如果使用了-idir選項,則會現在dir目查詢,再按常規的順序去找。
對於#include,使用-idir選項,gcc/g++會到dir目錄下查詢,然後再到系統預設的頭檔案目錄查詢。
-i-取消-idir選項
-idirafter dir
在-i選項指定的目錄裡面查詢失敗,則到這個目錄下查詢
-iprefix prefix、-iwithprefix dir
一般一起使用,在-i選項指定的目錄裡面查詢失敗,則到prefix+dir下查詢
-nostdinc
使編譯器不在系統預設的頭檔案目錄裡面找檔案,一般和-idir選項一起使用
-nostdin c++
規定不再g++指定的標準路徑中搜尋
-m生成檔案關聯的資訊
-mm生成檔案關聯資訊,但是忽略#include造成的依賴關係
-md同-m,同時將結果輸出到字尾為.d的檔案裡
-mmd
同-mm,同時將結果輸出到字尾為.d的檔案裡
-llibaray
制定編譯時候使用的庫
gcc -lpthread hello.c
gcc常用的庫有glibc,其中包含了c標準庫的實現。幾乎所有的c語言都要呼叫glibc,所以glibc是linux平台c程式執行的基礎。因此-lc是gcc的預設選項。除此以外,libm中包含了一下用於數學計算的函式,libpthread中包含了關於執行緒的函式。-ldir
制定編譯的時候,搜尋庫的路徑。不然編譯器將只在標準庫的目錄下查詢。
-static
禁止使用動態鏈結庫,編譯出來的檔案一般很大
-share
盡量使用動態鏈結庫,編譯出來的檔案一般較小,但執行時依賴動態鏈結庫。
-traditional
試圖讓編譯器支援傳統的c語言特性
-o0、o1、-o2、o3
編譯器優化選項。-o0為不做任何優化,-o或-o1為預設優化,-o2進一步優化,-o3更進一步優化,包括inline函式。
-w不生成任何警告資訊
-wall
生成所有警告資訊
gcc可同時用來編譯c程式和c++程式。gcc命令只能編譯c++原始檔,而不能自動和c++程式使用的庫連線。因此,通常使用g++命令來完成c++程式的編譯和連線,該程式會自動呼叫gcc實現編譯。
gcc 編譯粗略介紹 l引數和 L引數
l引數就是用來指定程式要鏈結的庫,l引數緊接著就是庫名,那麼庫名跟真正的庫檔名有什麼關係呢?就拿數學庫來說,他的庫名是m,他的庫檔名是libm.so,很容易看出,把庫檔名的頭lib和尾.so去掉就是庫名了 好了現在我們知道怎麼得到庫名,當我們自已要用到乙個第三方提供的庫名字libtest.so,那麼...
gcc 引數詳解
gcc引數詳解 介紹 gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器 cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器 egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器 as 4.連線...
gcc引數詳解
gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器...