GCC 使用手冊

2021-06-07 22:39:51 字數 4228 閱讀 7695

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...