gcc引數詳解
[介紹]
gcc and g++分別是
gnu的
c & c++
編譯器gcc/g++在執行編譯工作的時候,總共需要4步
1.預處理,生成
.i的檔案
2.將預處理後的檔案不轉換成組合語言
,生成檔案
.s 3.有彙編變為目標**
(機器**)生成
.o的檔案
4.連線目標**
,生成可執行程式
[引數詳解
] -c
只啟用預處理,編譯
,和彙編
,也就是他只把程式做成
obj檔案
例子用法:
gcc -c hello.c
他將生成.o的
obj檔案
-s 只啟用預處理和編譯,就是指把檔案編譯成為彙編**。
例子用法
gcc -s hello.c
他將生成.s的彙編**,你可以用文字編輯器察看
-e 只啟用預處理,這個不生成檔案
,你需要把它重定向到乙個輸出檔案裡
面. 例子用法:
gcc -e hello.c > pianoapan.txt
gcc -e hello.c | more
慢慢看吧,乙個
hello word
也要與處理成
800行的**
-o 制定目標名稱,預設的時候
,gcc
編譯出來的檔案是
a.out,
很難聽,
如果你和我有同感,改掉它,哈哈
例子用法
gcc -o hello.exe hello.c (哦
,windows
用習慣了
) gcc -o hello.asm -s hello.c
-ansi
關閉gnu c中與
ansi c
不相容的特性,啟用
ansi c
的專有特性
(包括禁止一
些asm inline typeof關鍵字,以及
unix,vax
等預處理巨集,
-wall
顯示警告資訊
-fno-asm
此選項實現ansi選項的功能的一部分,它禁止將
asm,inline
和typeof
用作關鍵字。
-fno-strict-prototype
只對g++起作用
,使用這個選項
,g++
將對不帶引數的函式
,都認為是沒有顯式
的對引數的個數和型別說明,而不是沒有引數
. 而gcc無論是否使用這個引數
,都將對沒有帶引數的函式
,認為城沒有顯式說
明的型別
-fthis-is-varialble
就是向傳統c++看齊
,可以使用
this
當一般變數使用
. -fcond-mismatch
允許條件表示式的第二和第三引數型別不匹配,表示式的值將為
void
型別-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
這四個引數是對char型別進行設定
,決定將
char
型別設定成
unsigned char(
前兩個引數)或者
signed char(
後兩個引數)
-include file
包含某個**,簡單來說
,就是便以某個檔案
,需要另乙個檔案的時候
,就可以
用它設定,功能就相當於在**中使用
#include
例子用法:
gcc hello.c -include /root/pianopan.h
-imacros file
將file檔案的巨集
,擴充套件到
gcc/g++
的輸入檔案
,巨集定義本身並不出現在輸入檔案
中-dmacro
相當於c語言中的
#define macro
-dmacro=defn
相當於c語言中的
#define macro=defn
-umacro
相當於c語言中的
#undef macro
-undef
取消對任何非標準巨集的定義
-idir
在你是用#include"file"的時候
,gcc/g++
會先在當前目錄查詢你所制定的頭
檔案,如果沒有找到
,他回到預設的頭檔案目錄找
,如果使用
-i制定了目錄,他
回先在你所制定的目錄查詢,然後再按常規的順序去找
. 對於#include,gcc/g++會到
-i制定的目錄查詢
,查詢不到
,然後將到系
統的預設的頭檔案目錄查詢
-i-
就是取消前乙個引數的功能,所以一般在
-idir
之後使用
-idirafter dir
在-i的目錄裡面查詢失敗
,講到這個目錄裡面查詢
. -iprefix prefix
-iwithprefix dir
一般一起使用,當
-i的目錄查詢失敗,會到
prefix+dir
下查詢-nostdinc
使編譯器不再系統預設的頭檔案目錄裡面找標頭檔案,一般和
-i聯合使用,明確
限定標頭檔案的位置
-nostdin c++
規定不在g++指定的標準路經中搜尋
,但仍在其他路徑中搜尋
,.此選項在建立
libg++庫使用
-c 在預處理的時候,不刪除注釋資訊
,一般和
-e使用
,有時候分析程式,用這個很
方便的-m
生成檔案關聯的資訊。包含目標檔案所依賴的所有源**
你可以用gcc -m hello.c來測試一下,很簡單。
-mm
和上面的那個一樣,但是它將忽略由#include造成的依賴關係。
-md
和-m相同,但是輸出將匯入到
.d的檔案裡面
-mmd
和-mm相同,但是輸出將匯入到
.d的檔案裡面
-wa,option
此選項傳遞option給匯程式設計序;如果
option
中間有逗號,就將
option
分成多個選
項,然後傳遞給會匯程式設計序
-wl.option
此選項傳遞option給連線程式;如果
option
中間有逗號,就將
option
分成多個選
項,然後傳遞給會連線程式
. -llibrary
制定編譯的時候使用的庫
例子用法
gcc -lcurses hello.c
使用ncurses庫編譯程式
-ldir
制定編譯的時候,搜尋庫的路徑。比如你自己的庫,可以用它制定目錄,不然
編譯器將只在標準庫的目錄找。這個dir就是目錄的名稱。
-o0
-o1
-o2
-o3
編譯器的優化選項的4個級別,
-o0表示沒有優化
,-o1
為預設值,
-o3優化級別最
高 -g
只是編譯器,在編譯的時候,產生條是資訊。
-gstabs
此選項以stabs格式聲稱除錯資訊
,但是不包括
gdb除錯資訊
. -gstabs+
此選項以stabs格式聲稱除錯資訊
,並且包含僅供
gdb使用的額外除錯資訊
. -ggdb
此選項將盡可能的生成gdb的可以使用的除錯資訊.
gcc編譯引數
gcc編譯引數 linux寶庫 gcc引數詳解 介紹 gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的...
GCC 編譯引數
安全技術 完全開啟 部分開啟 關閉canary fstack protector all fstack protecto fno stack protector nx z noexecstack z execstack pie pie no pie relro z now z lazy z nore...
gcc編譯引數
gcc main.c o main.out 編譯成指定的名字 gcc main.c o out main.out 編譯成指定名字並儲存到已存在資料夾,必須存在,不然報錯預設情況下,gcc在編譯時 標頭檔案搜尋目錄為 uer include usr local include 庫檔案搜尋目錄為 usr...