?? gcc.txt
字號:
1.前言
GCC編譯器的手冊(GCC MANUAL)的英文版已經(jīng)非常全面,并且結(jié)構(gòu)也非常完善了,只是一直都沒有中文的版本,我這次閱讀了GCC編譯器的主要內(nèi)容,對手冊的內(nèi)容進(jìn)行了結(jié)構(gòu)性的了解,認(rèn)為有必要對這次閱讀的內(nèi)容進(jìn)行整理,為以后的工作做準(zhǔn)備。
由于我對這個英文手冊的閱讀也僅僅是結(jié)構(gòu)性的。因此有很多地方并沒有看,所以這篇文檔的內(nèi)容我也只能寫出部分,對于以后需要詳細(xì)了解的地方,會再往這篇文檔中增添內(nèi)容,需要增添的內(nèi)容主要是編譯器的各種開關(guān)。
2. GCC功能介紹
GCC編譯器完成從C、C++、objective-C等源文件向運行在特定CPU硬件上的目標(biāo)代碼的轉(zhuǎn)換(這是任何一個編譯器需要完成的任務(wù))。
GCC能夠處理的源文件分為C、C++、Objective-C、匯編語言等。對于這些源文件,用他們的后綴名進(jìn)行標(biāo)示。GCC能夠處理的后綴有:
a. *.c *.C (C語言)
b. *.cxx *.cc (C++語言)
c. *.m (面向?qū)ο蟮腃)
d. *.i (預(yù)處理后的C語言源文件)
e. *.ii (預(yù)處理后的C++語言源文件)
f. *.s *.S (匯編語言)
h. *.h (頭文件)
目標(biāo)文件可以是:
a. *.o 編譯連接后的目標(biāo)文件
b. *.a 庫文件
編譯器把編譯生成目標(biāo)代碼的任務(wù)分為以下4步:
a.預(yù)處理,把預(yù)處理命令掃描處理完畢;
b.編譯,把預(yù)處理后的結(jié)果編譯成匯編或者目標(biāo)模塊;
c.匯編,把編譯出來的結(jié)果匯編成具體CPU上的目標(biāo)代碼模塊;
d.連接,把多個目標(biāo)代碼模塊連接生成一個大的目標(biāo)模塊;
3. GCC開關(guān)
GCC的運行開關(guān)共分為11類,這是類開關(guān)從11個方面控制著GCC程序的運行,以達(dá)到特定的編譯目的。
3.1. 全局開關(guān)(OVERALL OPTIONS)
全局開關(guān)用來控制在“GCC功能介紹”中的GCC的4個步驟的運行,在缺省的情況下,這4個步驟都是要執(zhí)行的,但是當(dāng)給定一些全局開關(guān)后,這些步驟就會在某一步停止執(zhí)行,這產(chǎn)生中間結(jié)果,例如可能你只是需要中間生成的預(yù)處理的結(jié)果或者是匯編文件(比如擬的目的是為了看某個CPU上的匯編語言怎么寫)。
3.1.1. –x language
對于源文件是用什么語言編寫的,可以通過文件名的后綴來標(biāo)示,也可以用這開關(guān)。指定輸入文件是什么語言編寫的,language 可以是如下的內(nèi)容
a. c
b. objective-c
c. c-header
d. c++
e.cpp-output
f.assembler
g.assembler-with-cpp
3.1.2.–x none
把上一節(jié)介紹的-x開關(guān)都給關(guān)掉了。
3.1.3. –c
編譯成把源文件目標(biāo)代碼,不做連接的動作。
3.1.4. –S
把源文件編譯成匯編代碼,不做匯編和連接的動作。
3.1.5. –E
只把源文件進(jìn)行預(yù)處理之后的結(jié)果輸出來。不做編譯,匯編,連接的動作。
3.1.6. –o file
指明輸出文件名是file。
3.1.7. –v
把整個編譯過程的輸出信息都給打印出來。
3.1.8.–pipe
由于gcc的工作分為好幾步才完成,所以需要在過程中生成臨時文件,使用-pipe就是用管道替換臨時文件。
3.2. 語言相關(guān)開關(guān)(Language Options)
用來處理和語言相關(guān)的控制開關(guān)。
3.2.1.–ansi
這個開關(guān)讓GCC編譯器把所有的gnu的編譯器特性都給關(guān)掉,讓你的程序可以和ansi標(biāo)準(zhǔn)兼容。
除了以上的開關(guān)外,語言相關(guān)開關(guān)還有很多,如果在以后的工作學(xué)習(xí)中遇到了再加不遲!3.3.預(yù)處理開關(guān)(Preprocessor Options)
用來控制預(yù)處理所設(shè)置的開關(guān)。
3.3.1. –include file
在編譯之前,把file包含進(jìn)去,相當(dāng)于在所有編譯的源文件最前面加入了一個#include <file>語句,這樣做更“省油”。
3.3.2. –imacros file
同-include file 一樣。不過這個文件在具體編譯的時候只有里面定義的宏才起作用,所以值用來在file文件里面定義宏。
3.3.3. –nostdinc
在搜尋include 的文件路徑中去掉標(biāo)準(zhǔn)的c語言頭文件搜索路徑,例如stdio.h文件就是放在標(biāo)準(zhǔn)頭文件搜索路徑下。
3.3.4. –nostdinc++
同上,只是去掉的是標(biāo)準(zhǔn)C++語言的頭文件搜索路徑。
3.3.5. –C
同-E參數(shù)配合使用。讓預(yù)處理后的結(jié)果,把注釋保留,讓人能夠比較好讀它。
3.3.6. –Dmacro
把macro定義為字符串’1’。
3.3.7. –Dmacro = defn
把macro定義為defn。
3.3.8. –Umacro
把對macro的定義取消。
除了以上的開關(guān)外,預(yù)處理相關(guān)開關(guān)還有很多,如果在以后的工作學(xué)習(xí)中遇到了再加不遲!
3.4. 匯編開關(guān)(Assembler Option)
用來控制匯編行為的開關(guān)。
3.4.1. –Wa , option
把option作為開關(guān)送給匯編程序。如果option里面有逗號,則作為好幾行進(jìn)行處理。
3.5.連接開關(guān)(Linker Options)
用來控制連接過程的開關(guān)選項。
3.5.1. object-file-name
3.5.2. –llibrary
連接庫文件開關(guān)。例如-lugl,則是把程序同libugl.a文件進(jìn)行連接。
3.5.3. –lobjc
這個開關(guān)用在面向?qū)ο蟮腃語言文件的庫文件處理中。
3.5.4. –nostartfiles
在連接的時候不把系統(tǒng)相關(guān)的啟動代碼連接進(jìn)來。
3.5.5. –nostdlib
在連接的時候不把系統(tǒng)相關(guān)的啟動文件和系統(tǒng)相關(guān)的庫連接進(jìn)來。
3.5.6. –static
在一些系統(tǒng)上支持動態(tài)連接,這個開關(guān)則不允許動態(tài)連接。
3.5.7. –shared
生成可共享的被其他程序連接的目標(biāo)模塊。
連接相關(guān)的開關(guān)還有一些,以后需要的時候再補。
3.6.目錄相關(guān)開關(guān)(Directory Options)
用于定義與目錄操作相關(guān)的開關(guān)。
3.6.1. –Idir
宏include需要搜尋的目錄。
3.6.2.–I-
與-I開關(guān)類似。
3.6.3.–Ldir
搜尋庫文件(*.a)的路徑。
和目錄相關(guān)的開關(guān)還有很多,以后需要再加。
3.7. 警告開關(guān)(Warning Options)
與警告處理相關(guān)的開關(guān)。
3.7.1.–fsyntax-only
只檢查代碼中的語法錯誤,但并沒有輸出。
3.7.2. –w
禁止一切警告信息打印出來。
3.7.3. –Wno-import
禁止對宏#import提出警告。
3.7.4. –pedantic
3.7.5. –pedantic-errors
3.7.6. –W
還有很多與警告處理相關(guān)的開關(guān),以后再補。
3.8. 調(diào)試開關(guān)(Debugging Options)
3.8.1.–g
把調(diào)試開關(guān)打開,讓編譯的目標(biāo)文件有調(diào)試信息。
還有很多與調(diào)試處理相關(guān)的開關(guān),以后再補。
3.9. 優(yōu)化開關(guān)(Optimization Options)
-O1 –O2 –O3 –O0,這些開關(guān)分別控制優(yōu)化的強度,-O3最強。
3.10. 目標(biāo)機(jī)開關(guān)(Target Options)
3.10.1. –b machine
在有的時候,Gcc編譯器編譯出來的目標(biāo)代碼并不是在運行這個編譯動作的機(jī)器上運行而是另外一臺機(jī)器,這種編譯叫做交叉編譯,用來運行最終目標(biāo)代碼的得機(jī)器叫做目標(biāo)機(jī),machine就是用來指明目標(biāo)機(jī)的類型的。
3.10.2. –V version
用來告訴編譯器使用它的多少版本的功能,version參數(shù)用來表示版本。
3.11. CPU相關(guān)開關(guān)(Machine Dependent Options)
比較多,也是在交叉編譯的時候用得著。以后再說。
3.12. 生成代碼開關(guān)(Code Generation Options)
********************************************************************************************
GCC 使用指南
使用語法:
gcc [ option | 20041012141827.htm ]...
g++ [ option | 20041012141827.htm ]...
其中 option 為 gcc 使用時的選項(后面會再詳述),
而 20041012141827.htm 為欲以 gcc 處理的文件
說明:
這 C 與 C++ 的 compiler 已將產(chǎn)生新程序的相關(guān)程序整合起來。產(chǎn)
生一個新的程序需要經(jīng)過四個階段:預(yù)處理、編譯、匯編、連結(jié),而這兩
個編譯器都能將輸入的文件做不同階段的處理。雖然原始程序的擴(kuò)展名可
用來分辨編寫原始程序碼所用的語言,但不同的compiler,其預(yù)設(shè)的處理
程序卻各不相同:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -