1.前言
gcc編譯器的手冊(gcc manual)的英文版已經非常全面,並且結構也非常完善了,只是一直都沒有中文的版本,我這次閱讀了gcc編譯器的主要內容,對手冊的內容進行了結構性的了解,認為有必要對這次閱讀的內容進行整理,為以後的工作做準備。
由於我對這個英文手冊的閱讀也僅僅是結構性的。因此有很多地方並沒有看,所以這篇文件的內容我也只能寫出部分,對於以後需要詳細了解的地方,會再往這篇文件中增添內容,需要增添的內容主要是編譯器的各種開關。
2. gcc功能介紹
gcc編譯器完成從c、c++、objective-c等原始檔向執行在特定cpu硬體上的目標**的轉換(這是任何乙個編譯器需要完成的任務)。
gcc能夠處理的原始檔分為c、c++、objective-c、組合語言等。對於這些原始檔,用他們的字尾名進行標示。gcc能夠處理的字尾有:
a. *.c *.c (c語言)
b. *.cxx *.cc (c++語言)
c. *.m (物件導向的c)
d. *.i (預處理後的c語言原始檔)
e. *.ii (預處理後的c++語言原始檔)
f. *.s *.s (組合語言)
h. *.h (標頭檔案)
目標檔案可以是:
a. *.o 編譯連線後的目標檔案
b. *.a 庫檔案
編譯器把編譯生成目標**的任務分為以下4步:
a.預處理,把預處理命令掃瞄處理完畢;
b.編譯,把預處理後的結果編譯成彙編或者目標模組;
c.彙編,把編譯出來的結果彙編成具體cpu上的目標**模組;
d.連線,把多個目標**模組連線生成乙個大的目標模組;
3. gcc開關
gcc的執行開關共分為11類,這是類開關從11個方面控制著gcc程式的執行,以達到特定的編譯目的。
3.1. 全域性開關(overall options)
全域性開關用來控制在「gcc功能介紹」中的gcc的4個步驟的執行,在預設的情況下,這4個步驟都是要執行的,但是當給定一些全域性開關後,這些步驟就會在某一步停止執行,這產生中間結果,例如可能你只是需要中間生成的預處理的結果或者是彙編檔案(比如擬的目的是為了看某個cpu上的組合語言怎麼寫)。
3.1.1. –x language
對於原始檔是用什麼語言編寫的,可以通過檔名的字尾來標示,也可以用這開關。指定輸入檔案是什麼語言編寫的,language 可以是如下的內容
a. c
b. objective-c
c. c-header
d. c++
e.cpp-output
f.assembler
g.assembler-with-cpp
3.1.2.–x none
把上一節介紹的-x開關都給關掉了。
3.1.3. –c
編譯成把原始檔目標**,不做連線的動作。
3.1.4. –s
把原始檔編譯成彙編**,不做彙編和連線的動作。
3.1.5. –e
只把原始檔進行預處理之後的結果輸出來。不做編譯,彙編,連線的動作。
3.1.6. –o file
指明輸出檔名是file。
3.1.7. –v
把整個編譯過程的輸出資訊都給列印出來。
3.1.8.–pipe
由於gcc的工作分為好幾步才完成,所以需要在過程中生成臨時檔案,使用-pipe就是用管道替換臨時檔案。
3.2. 語言相關開關(language options)
用來處理和語言相關的控制開關。
3.2.1.–ansi
這個開關讓gcc編譯器把所有的gnu的編譯器特性都給關掉,讓你的程式可以和ansi標準相容。
除了以上的開關外,語言相關開關還有很多,如果在以後的工作學習中遇到了再加不遲!3.3.預處理開關(preprocessor options)
用來控制預處理所設定的開關。
3.3.1. –include file
在編譯之前,把file包含進去,相當於在所有編譯的原始檔最前面加入了乙個#include 語句,這樣做更「省油」。
3.3.2. –imacros file
同-include file 一樣。不過這個檔案在具體編譯的時候只有裡面定義的巨集才起作用,所以值用來在file檔案裡面定義巨集。
3.3.3. –nostdinc
在搜尋include 的檔案路徑中去掉標準的c語言標頭檔案搜尋路徑,例如stdio.h檔案就是放在標準標頭檔案搜尋路徑下。
3.3.4. –nostdinc++
同上,只是去掉的是標準c++語言的標頭檔案搜尋路徑。
3.3.5. –c
同-e引數配合使用。讓預處理後的結果,把注釋保留,讓人能夠比較好讀它。
3.3.6. –dmacro
把macro定義為字串』1』。
3.3.7. –dmacro = defn
把macro定義為defn。
3.3.8. –umacro
把對macro的定義取消。
除了以上的開關外,預處理相關開關還有很多,如果在以後的工作學習中遇到了再加不遲!
3.4. 彙編開關(assembler option)
用來控制彙編行為的開關。
3.4.1. –wa , option
把option作為開關送給匯程式設計序。如果option裡面有逗號,則作為好幾行進行處理。
3.5.連線開關(linker options)
用來控制連線過程的開關選項。
3.5.1. object-file-name
3.5.2. –llibrary
連線庫檔案開關。例如-lugl,則是把程式同libugl.a檔案進行連線。
3.5.3. –lobjc
這個開關用在物件導向的c語言檔案的庫檔案處理中。
3.5.4. –nostartfiles
在連線的時候不把系統相關的啟動**連線進來。
3.5.5. –nostdlib
在連線的時候不把系統相關的啟動檔案和系統相關的庫連線進來。
3.5.6. –static
在一些系統上支援動態連線,這個開關則不允許動態連線。
3.5.7. –shared
生成可共享的被其他程式連線的目標模組。
連線相關的開關還有一些,以後需要的時候再補。
3.6.目錄相關開關(directory options)
用於定義與目錄操作相關的開關。
3.6.1. –idir
巨集include需要搜尋的目錄。
3.6.2.–i-
與-i開關類似。
3.6.3.–ldir
搜尋庫檔案(*.a)的路徑。
和目錄相關的開關還有很多,以後需要再加。
3.7. 警告開關(warning options)
與警告處理相關的開關。
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
還有很多與警告處理相關的開關,以後再補。
3.8. 除錯開關(debugging options)
3.8.1.–g
把除錯開關開啟,讓編譯的目標檔案有除錯資訊。
還有很多與除錯處理相關的開關,以後再補。
3.9. 優化開關(optimization options)
-o1 –o2 –o3 –o0,這些開關分別控制優化的強度,-o3最強。
3.10. 目標機開關(target options)
3.10.1. –b machine
在有的時候,gcc編譯器編譯出來的目標**並不是在執行這個編譯動作的機器上執行而是另外一台機器,這種編譯叫做交叉編譯,用來執行最終目標**的得機器叫做目標機,machine就是用來指明目標機的型別的。
3.10.2. –v version
用來告訴編譯器使用它的多少版本的功能,version引數用來表示版本。
3.11. cpu相關開關(machine dependent options)
比較多,也是在交叉編譯的時候用得著。以後再說。
3.12. 生成**開關(code generation options)
CVS使用手冊
注意 第一次匯出以後,就不是通過cvs checkout來同步檔案了,而是要進入剛才cvs checkout project name匯出的project name目錄下進行具體檔案的版本同步 新增,修改,刪除 操作。cvs的許可權管理分2種策略 基於系統檔案許可權的系統使用者管理 適合多個在lin...
sed使用手冊
原貼 http blog.chinaunix.net u 23204 showart 305602.html sed使用手冊 原創 在sed語句,正規表示式必須封閉在 中間。如 d,刪除空行。sed位址 在sed位址管理中,預設是對全域性進行操作,同時位址可以分為行位址和模式位址。如1,10d 12...
vi 使用手冊
進入vi的命令 vi filename 開啟或新建檔案,並將游標置於第一行首 vi n filename 開啟檔案,並將游標置於第n行首 vi filename 開啟檔案,並將游標置於最後一行首 vi pattern filename 開啟檔案,並將游標置於第乙個與pattern匹配的串處 vi r...