GCC 3
Section: GNU Tools (1)
Updated: 2003/12/05
-
調(diào)試選項(xiàng)(DEBUGGING OPTION)
GNU CC擁有許多特別選項(xiàng),既可以調(diào)試用戶的程序,也可以對(duì)GCC排錯(cuò):
- -g
- 以操作系統(tǒng)的本地格式(stabs, COFF, XCOFF,或DWARF).產(chǎn)生調(diào)試信息. GDB能夠使用這些調(diào)試信息.
在大多數(shù)使用stabs格式的系統(tǒng)上, `-g'選項(xiàng)啟動(dòng)只有GDB才使用的額外調(diào)試信息;這些信息使GDB 調(diào)試效果更好,但是有可能導(dǎo)致其他調(diào)試器崩潰,或拒絕讀入程序.如果你確定要控制是否生成額外的信息, 使用`-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+',或`-gdwarf' (見下文).
和大多數(shù)C編譯器不同, GNU CC允許結(jié)合使用`-g'和`-O'選項(xiàng).優(yōu)化的代碼偶爾制造 一些驚異的結(jié)果:某些聲明過(guò)的變量根本不存在;控制流程直接跑到?jīng)]有預(yù)料到的地方;某些語(yǔ)句因?yàn)橛?jì)算結(jié)果是常量或已經(jīng)確定而 沒有執(zhí)行;某些語(yǔ)句在其他地方執(zhí)行,因?yàn)樗麄儽灰频窖h(huán)外面了.
然而它證明了調(diào)試優(yōu)化的輸出是可能的.對(duì)可能含有錯(cuò)誤的程序使用優(yōu)化器是合理的.
如果GNU CC支持輸出多種調(diào)試信息,下面的選項(xiàng)則非常有用.
- -ggdb
- 以本地格式(如果支持)輸出調(diào)試信息,盡可能包括GDB擴(kuò)展.
- -gstabs
- 以stabs格式(如果支持)輸出調(diào)試信息,不包括GDB擴(kuò)展.這是大多數(shù)BSD系統(tǒng)上DBX使用的格式.
- -gstabs+
- 以stabs格式(如果支持)輸出調(diào)試信息,使用只有GNU調(diào)試器(GDB)理解的GNU擴(kuò)展.使用這些擴(kuò)展有可能導(dǎo)致 其他調(diào)試器崩潰或拒絕讀入程序.
- -gcoff
- 以COFF格式(如果支持)輸出調(diào)試信息.這是在System V第四版以前的大多數(shù)System V系統(tǒng)上SDB使用的 格式.
- -gxcoff
- 以XCOFF格式(如果支持)輸出調(diào)試信息.這是IBM RS/6000系統(tǒng)上DBX調(diào)試器使用的格式.
- -gxcoff+
- 以XCOFF格式(如果支持)輸出調(diào)試信息,使用只有GNU調(diào)試器(GDB)理解的GNU擴(kuò)展.使用這些擴(kuò)展有可能導(dǎo)致 其他調(diào)試器崩潰或拒絕讀入程序.
- -gdwarf
- 以DWARF格式(如果支持)輸出調(diào)試信息.這是大多數(shù)System V第四版系統(tǒng)上SDB使用的格式.
- -gdwarf+
- 以DWARF格式(如果支持)輸出調(diào)試信息,使用只有GNU調(diào)試器(GDB)理解的GNU擴(kuò)展.使用這些擴(kuò)展有可能導(dǎo)致 其他調(diào)試器崩潰或拒絕讀入程序.
-glevel
-ggdblevel
-gstabslevel
-gcofflevel -gxcofflevel
- -gdwarflevel
- 請(qǐng)求生成調(diào)試信息,同時(shí)用level指出需要多少信息.默認(rèn)的level值是2.
Level 1輸出最少量的信息,僅夠在不打算調(diào)試的程序段內(nèi)backtrace.包括函數(shù)和外部變量的描述,但是 沒有局部變量和行號(hào)信息.
Level 3包含更多的信息,如程序中出現(xiàn)的所有宏定義.當(dāng)使用`-g3'選項(xiàng)的時(shí)候,某些調(diào)試器支持 宏擴(kuò)展.
- -p
- 產(chǎn)生額外代碼,用于輸出profile信息,供分析程序prof使用.
- -pg
- 產(chǎn)生額外代碼,用于輸出profile信息,供分析程序gprof使用.
- -a
- 產(chǎn)生額外代碼,用于輸出基本塊(basic block)的profile信息,它記錄各個(gè)基本塊的執(zhí)行次數(shù),供諸如 tcov此類的程序分析.但是注意,這個(gè)數(shù)據(jù)格式并非tcov期待的.最終GNU gprof 將處理這些數(shù)據(jù).
- -ax
- 產(chǎn)生額外代碼,用于從'bb.in'文件讀取基本塊的profile參數(shù),把profile的結(jié)果寫到'bb.out' 文件. `bb.in'包含一張函數(shù)列表.一旦進(jìn)入列表中的某個(gè)函數(shù), profile操作就開始,離開最外層的函數(shù)后, profile操作就結(jié)束.以`-'為前綴名的函數(shù)排除在profile操作之外.如果函數(shù)名不是唯一的,它可以寫成 `/path/filename.d:functionname'來(lái)澄清. `bb.out'將列出一些有效的文件名.這四個(gè)函數(shù)名具有 特殊含義: `__bb_jumps__'導(dǎo)致跳轉(zhuǎn)(jump)頻率寫進(jìn)`bb.out'. `__bb_trace__'導(dǎo)致基本塊序列通過(guò) 管道傳到`gzip',輸出`bbtrace.gz'文件. `__bb_hidecall__'導(dǎo)致從跟蹤(trace)中排除call 指令. `__bb_showret__'導(dǎo)致在跟蹤中包括返回指令.
- -dletters
- 編譯的時(shí)候,在letters指定的時(shí)刻做調(diào)試轉(zhuǎn)儲(chǔ)(dump).用于調(diào)試編譯器.大多數(shù)轉(zhuǎn)儲(chǔ)的文件名 通過(guò)源文件名添加字詞獲得(例如`foo.c.rtl'或`foo.c.jump').
- -dM
- 預(yù)處理結(jié)束的時(shí)候轉(zhuǎn)儲(chǔ)所有的宏定義,不輸出到文件.
- -dN
- 預(yù)處理結(jié)束的時(shí)候轉(zhuǎn)儲(chǔ)所有的宏名.
- -dD
- 預(yù)處理結(jié)束的時(shí)候轉(zhuǎn)儲(chǔ)所有的宏定義,同時(shí)進(jìn)行正常輸出.
- -dy
- 語(yǔ)法分析(parse)的時(shí)候在標(biāo)準(zhǔn)錯(cuò)誤轉(zhuǎn)儲(chǔ)調(diào)試信息.
- -dr
- RTL階段后轉(zhuǎn)儲(chǔ)到`file.rtl'.
- -dx
- 僅對(duì)函數(shù)生成RTL,而不是編譯.通常和`r'聯(lián)用.
- -dj
- 第一次跳轉(zhuǎn)優(yōu)化后轉(zhuǎn)儲(chǔ)到`file.jump'.
- -ds
- CSE (包括有時(shí)候跟在CSE后面的跳轉(zhuǎn)優(yōu)化)后轉(zhuǎn)儲(chǔ)到`file.cse'.
- -dL
- 循環(huán)優(yōu)化后轉(zhuǎn)儲(chǔ)到`file.loop'.
- -dt
- 第二次CSE處理(包括有時(shí)候跟在CSE后面的跳轉(zhuǎn)優(yōu)化)后轉(zhuǎn)儲(chǔ)到`file.cse2'.
- -df
- 流程分析(flow analysis)后轉(zhuǎn)儲(chǔ)到`file.flow'.
- -dc
- 指令組合(instruction combination)后轉(zhuǎn)儲(chǔ)到`file.combine'.
- -dS
- 第一次指令安排(instruction schedule)后轉(zhuǎn)儲(chǔ)到`file.sched'.
- -dl
- 局部寄存器分配后轉(zhuǎn)儲(chǔ)到`file.lreg'.
- -dg
- 全局寄存器分配后轉(zhuǎn)儲(chǔ)到`file.greg'.
- -dR
- 第二次指令安排(instruction schedule)后轉(zhuǎn)儲(chǔ)到`file.sched2'.
- -dJ
- 最后一次跳轉(zhuǎn)優(yōu)化后轉(zhuǎn)儲(chǔ)到`file.jump2'.
- -dd
- 推遲分支調(diào)度(delayed branch scheduling)后轉(zhuǎn)儲(chǔ)到`file.dbr'.
- -dk
- 寄存器-堆棧轉(zhuǎn)換后轉(zhuǎn)儲(chǔ)到`file.stack'.
- -da
- 產(chǎn)生以上所有的轉(zhuǎn)儲(chǔ).
- -dm
- 運(yùn)行結(jié)束后,在標(biāo)準(zhǔn)錯(cuò)誤顯示內(nèi)存使用統(tǒng)計(jì).
- -dp
- 在匯編輸出加注指明使用了哪些模式(pattern)及其替代模式.
- -fpretend-float
- 交叉編譯的時(shí)候,假定目標(biāo)機(jī)和宿主機(jī)使用同樣的浮點(diǎn)格式.它導(dǎo)致輸出錯(cuò)誤的浮點(diǎn)常數(shù),但是在目標(biāo)機(jī)上運(yùn)行的時(shí)候, 真實(shí)的指令序列有可能和GNU CC希望的一樣.
- -save-temps
- 保存那些通常是``臨時(shí)''的中間文件;置于當(dāng)前目錄下,并且根據(jù)源文件命名.因此,用`-c -save-temps'選項(xiàng)編譯`foo.c '會(huì)生成` foo.cpp'和`foo.s' 以及`foo.o'文件.
- -print-file-name=library
- 顯示庫(kù)文件library的全路徑名,連接時(shí)會(huì)使用這個(gè)庫(kù)---其他什么事情都不作.根據(jù)這個(gè)選項(xiàng), GNU CC既不編譯,也不連接,僅僅顯示文件名.
- -print-libgcc-file-name
- 和`-print-file-name=libgcc.a'一樣.
- -print-prog-name=program
- 類似于`-print-file-name',但是查找程序program如`cpp'.
優(yōu)化選項(xiàng)(OPTIMIZATION OPTION)
這些選項(xiàng)控制多種優(yōu)化措施:
- -O
-
- -O1
- 優(yōu)化.對(duì)于大函數(shù),優(yōu)化編譯占用稍微多的時(shí)間和相當(dāng)大的內(nèi)存.
不使用`-O'選項(xiàng)時(shí),編譯器的目標(biāo)是減少編譯的開銷,使編譯結(jié)果能夠調(diào)試.語(yǔ)句是獨(dú)立的:如果在 兩條語(yǔ)句之間用斷點(diǎn)中止程序,你可以對(duì)任何變量重新賦值,或者在函數(shù)體內(nèi)把程序計(jì)數(shù)器指到其他語(yǔ)句,以及從源程序中 精確地獲取你期待的結(jié)果.
不使用`-O'選項(xiàng)時(shí),只有聲明了register的變量才分配使用寄存器.編譯結(jié)果比不用 `-O'選項(xiàng)的PCC要略遜一籌.
使用了`-O'選項(xiàng),編譯器會(huì)試圖減少目標(biāo)碼的大小和執(zhí)行時(shí)間.
如果指定了`-O'選項(xiàng), `-fthread-jumps'和`-fdefer-pop'選項(xiàng)將被 打開.在有delay slot的機(jī)器上, `-fdelayed-branch'選項(xiàng)將被打開.在即使沒有幀指針 (frame pointer)也支持調(diào)試的機(jī)器上, `-fomit-frame-pointer'選項(xiàng)將被打開.某些機(jī)器上 還可能會(huì)打開其他選項(xiàng).
- -O2
- 多優(yōu)化一些.除了涉及空間和速度交換的優(yōu)化選項(xiàng),執(zhí)行幾乎所有的優(yōu)化工作.例如不進(jìn)行循環(huán)展開(loop unrolling)和函數(shù)內(nèi)嵌(inlining).和-O選項(xiàng)比較,這個(gè)選項(xiàng)既增加了編譯時(shí)間,也提高了生成代碼的 運(yùn)行效果.
- -O3
- 優(yōu)化的更多.除了打開-O2所做的一切,它還打開了-finline-functions選項(xiàng).
- -O0
- 不優(yōu)化.
如果指定了多個(gè)-O選項(xiàng),不管帶不帶數(shù)字,最后一個(gè)選項(xiàng)才是生效的選項(xiàng).
諸如`-fflag'此類的選項(xiàng)描述一些機(jī)器無(wú)關(guān)的開關(guān).大多數(shù)開關(guān)具有肯定和否定兩種格式; `-ffoo'開關(guān)選項(xiàng)的否定格式應(yīng)該是`-fno-foo'.下面的列表只展示了一種格式---那個(gè)不是 默認(rèn)選項(xiàng)的格式.你可以通過(guò)去掉或添加`no-'構(gòu)造出另一種格式.
- -ffloat-store
- 不要在寄存器中存放浮點(diǎn)變量.這樣可以防止某些機(jī)器上不希望的過(guò)高精度,如68000的浮點(diǎn)寄存器(來(lái)自 68881)保存的精度超過(guò)了double應(yīng)該具有的精度.
對(duì)于大多數(shù)程序,過(guò)高精度只有好處.但是有些程序嚴(yán)格依賴于IEEE浮點(diǎn)數(shù)的定義.對(duì)這樣的程序可以使用 `-ffloat-store'選項(xiàng).
- -fmemoize-lookups
-
- -fsave-memoized
- 使用探索法(heuristic)進(jìn)行更快的編譯(僅對(duì)C++).默認(rèn)情況下不使用探索法.由于探索法只對(duì)某些輸入文件 有效,其他程序的編譯速度會(huì)變得更慢.
第一次編譯器必須對(duì)成員函數(shù)(或?qū)Τ蓡T數(shù)據(jù)的引用)建立一個(gè)調(diào)用.它必須(1)判斷出這個(gè)類是否實(shí)現(xiàn)了那個(gè)名字的 成員函數(shù); (2)決定調(diào)用哪個(gè)成員函數(shù)(涉及到推測(cè)需要做哪種類型轉(zhuǎn)換); (3)檢查成員函數(shù)對(duì)調(diào)用者是否可見.所有這些構(gòu)成 更慢的編譯.一般情形,第二次對(duì)成員函數(shù)(或?qū)Τ蓡T數(shù)據(jù)的引用)建立的調(diào)用,必須再次經(jīng)過(guò)相同長(zhǎng)度的處理.這意味著象 這樣的代碼
cout << "This " << p << " has " << n << " legs.\n";
對(duì)整個(gè)三步驟要做六次遍歷.通過(guò)使用軟件緩存, ``命中''能夠顯著地減少這種代價(jià).然而不幸的是,使用這種緩存 必須實(shí)現(xiàn)其他機(jī)制,帶來(lái)了它自己的開銷. `-fmemoize-lookups'選項(xiàng)打開軟件緩存.
因?yàn)楹瘮?shù)的正文環(huán)境不同,函數(shù)對(duì)成員和成員函數(shù)的訪問(wèn)權(quán)(可見性)也可能不同, g++可能需要刷新緩存. 使用`-fmemoize-lookups'選項(xiàng),每編譯完一個(gè)函數(shù)就刷新緩存.而`-fsave-memoized'選項(xiàng) 也啟用同樣的緩存,但是當(dāng)編譯器發(fā)覺最后編譯的函數(shù)的正文環(huán)境產(chǎn)生的訪問(wèn)權(quán)和下一個(gè)待編譯的函數(shù)相同,編譯器就 保留緩存內(nèi)容.這對(duì)某個(gè)類定義許多成員函數(shù)時(shí)非常有用:除了某些其他類的友函數(shù),每個(gè)成員函數(shù)擁有和其他成員函數(shù)完全一樣 的訪問(wèn)權(quán),因而無(wú)需刷新緩存.
- -fno-default-inline
- 默認(rèn)為不要把成員函數(shù)內(nèi)嵌,因?yàn)樗鼈兌x在類的作用域內(nèi)(僅C++).
- -fno-defer-pop
- 一旦函數(shù)返回,參數(shù)就立即彈出.對(duì)于那些調(diào)用函數(shù)后必須彈出參數(shù)的機(jī)器,編譯器一般情況下讓幾次函數(shù)調(diào)用的參數(shù) 堆積在棧上,然后一次全部彈出.
- -fforce-mem
- 做數(shù)學(xué)運(yùn)算前把將要使用的內(nèi)存操作數(shù)送入寄存器.通過(guò)把內(nèi)存訪問(wèn)轉(zhuǎn)換成潛在的公共子表達(dá)式,它可能產(chǎn)生較好的目標(biāo)碼. 如果它們不是公共子表達(dá)式,指令組合應(yīng)該消除各自的寄存器載荷.我樂意傾聽不同意見.
- -fforce-addr
- 做數(shù)學(xué)運(yùn)算前把將要使用的內(nèi)存地址常數(shù)送入寄存器.它可能和`-fforce-mem'一樣產(chǎn)生較好的 目標(biāo)碼.我樂意傾聽不同意見.
- -fomit-frame-pointer
- 對(duì)于不需要幀指針(frame pointer)的函數(shù),不要在寄存器中保存幀指針.這樣能夠避免保存,設(shè)置和恢復(fù) 幀指針的指令;同時(shí)對(duì)許多函數(shù)提供一個(gè)額外的寄存器. 但是在大多數(shù)機(jī)器上將無(wú)法調(diào)試.
某些機(jī)器上,如Vax,這個(gè)選項(xiàng)無(wú)效,因?yàn)闃?biāo)準(zhǔn)調(diào)用序列自動(dòng)處理幀指針,通過(guò)假裝不存在而不保存任何東西.機(jī)器描述宏 FRAME_POINTER_REQUIRED控制目標(biāo)機(jī)是否支持這個(gè)選項(xiàng).
- -finline-functions
- 把所有簡(jiǎn)單的函數(shù)集成進(jìn)調(diào)用者.編譯器探索式地決定哪些函數(shù)足夠簡(jiǎn)單,值得這種集成.
如果集成了所有給定函數(shù)的調(diào)用,而且函數(shù)聲明為static,那么一般說(shuō)來(lái)GCC有權(quán)不按匯編代碼輸出函數(shù).
- -fcaller-saves
- 允許在寄存器里分配數(shù)值,但是這個(gè)方案通常受到各個(gè)函數(shù)調(diào)用的沖擊,因此GCC生成額外的代碼,在函數(shù)調(diào)用的 前后保存和復(fù)原寄存器內(nèi)容.僅當(dāng)生成代碼看上去優(yōu)于反之結(jié)果時(shí)才實(shí)現(xiàn)這樣的分配.
某些機(jī)器上該選項(xiàng)默認(rèn)為允許,通常這些機(jī)器沒有調(diào)用保護(hù)寄存器代替使用.
- -fkeep-inline-functions
- 即使集成了某個(gè)函數(shù)的所有調(diào)用,而且該函數(shù)聲明為static,仍然輸出這個(gè)函數(shù)一個(gè)獨(dú)立的,運(yùn)行時(shí)可調(diào)用 的版本.
- -fno-function-cse
- 不要把函數(shù)地址存入寄存器;讓調(diào)用固定函數(shù)的指令顯式給出函數(shù)地址.
這個(gè)選項(xiàng)產(chǎn)生效率較低的目標(biāo)碼,但是如果不用這個(gè)選項(xiàng),某些不尋常的hack,改變匯編器的輸出,可能因優(yōu)化而帶來(lái) 困惑.
- -fno-peephole
- 禁止任何機(jī)器相關(guān)的peephole優(yōu)化.
- -ffast-math
- 這個(gè)選項(xiàng)出于速度優(yōu)化,允許GCC違反某些ANSI或IEEE規(guī)則/規(guī)格.例如,它允許編譯器假設(shè)sqrt 函數(shù)的參數(shù)是非負(fù)數(shù).
這個(gè)選項(xiàng)不被任何`-O'選項(xiàng)打開,因?yàn)閷?duì)于嚴(yán)格依靠IEEE或ANSI規(guī)則/規(guī)格實(shí)現(xiàn)的數(shù)學(xué)函數(shù),程序可能 會(huì)產(chǎn)生錯(cuò)誤的結(jié)果.
下列選項(xiàng)控制特定的優(yōu)化. `-O2'選項(xiàng)打開下面的大多數(shù)優(yōu)化項(xiàng),除了`-funroll-loops'和 `-funroll-all-loops'項(xiàng).
而`-O'選項(xiàng)通常打開`-fthread-jumps'和`-fdelayed-branch' 優(yōu)化項(xiàng),但是特定的機(jī)器上的默認(rèn)優(yōu)化項(xiàng)有可能改變.
如果特別情況下非常需要``微調(diào)''優(yōu)化,你可以使用下面的選項(xiàng).
- -fstrength-reduce
- 執(zhí)行循環(huán)強(qiáng)度縮小(loop strength reduction)優(yōu)化,并且消除重復(fù)變量.
- -fthread-jumps
- 執(zhí)行優(yōu)化的地點(diǎn)是,如果某個(gè)跳轉(zhuǎn)分支的目的地存在另一個(gè)條件比較,而且該條件比較包含在前一個(gè)比較語(yǔ)句之內(nèi),那么 執(zhí)行優(yōu)化.根據(jù)條件是true或者false,前面那條分支重定向到第二條分支的目的地或者緊跟在第二條分支后面.
- -funroll-loops
- 執(zhí)行循環(huán)展開(loop unrolling)優(yōu)化.僅對(duì)循環(huán)次數(shù)能夠在編譯時(shí)或運(yùn)行時(shí)確定的循環(huán)實(shí)行.
- -funroll-all-loops
- 執(zhí)行循環(huán)展開(loop unrolling)優(yōu)化.對(duì)所有循環(huán)實(shí)行.通常使程序運(yùn)行的更慢.
- -fcse-follow-jumps
- 在公共子表達(dá)式消元(common subexpression elimination)的時(shí)候,如果沒有其他路徑到達(dá)某個(gè)跳轉(zhuǎn)的 目的地,就掃過(guò)這條jump指令.例如,如果CSE遇到帶有else從句的if語(yǔ)句,當(dāng)條件測(cè)試為 false時(shí), CSE就跟在jump后面.
- -fcse-skip-blocks
- 它類似于`-fcse-follow-jumps'選項(xiàng),但是CSE跟在條件跳轉(zhuǎn)后面,條件跳轉(zhuǎn)跳過(guò)了 語(yǔ)句塊(block).如果CSE遇到一條簡(jiǎn)單的if語(yǔ)句,不帶else從句, `-fcse-skip-blocks'選項(xiàng)將導(dǎo)致CSE跟在if產(chǎn)生的跳轉(zhuǎn)后面.
- -frerun-cse-after-loop
- 執(zhí)行循環(huán)優(yōu)化后,重新進(jìn)行公共子表達(dá)式消元.
- -felide-constructors
- 如果看上去合理就省略構(gòu)造子(僅C++).根據(jù)這個(gè)選項(xiàng),對(duì)于下面的代碼, GNU C++直接從調(diào)用foo 初始化y,而無(wú)需通過(guò)臨時(shí)變量:
A foo (); A y = foo ();
如果沒有這個(gè)選項(xiàng), GNU C++首先通過(guò)調(diào)用類型A 合適的構(gòu)造子初始化y;然后把 foo的結(jié)果賦給臨時(shí)變量;最后,用臨時(shí)變量替換`y'的初始值.
ANSI C++標(biāo)準(zhǔn)草案規(guī)定了默認(rèn)行為(`-fno-elide-constructors').如果程序的構(gòu)造子存在 副效應(yīng), `-felide-constructors'選項(xiàng)能夠使程序有不同的表現(xiàn),因?yàn)榭赡芎雎砸恍?gòu)造子的調(diào)用.
- -fexpensive-optimizations
- 執(zhí)行一些相對(duì)開銷較大的次要優(yōu)化.
- -fdelayed-branch
- 如果對(duì)目標(biāo)機(jī)支持這個(gè)功能,它試圖重新排列指令,以便利用延遲分支(delayed branch)指令后面的指令空隙.
- -fschedule-insns
- 如果對(duì)目標(biāo)機(jī)支持這個(gè)功能,它試圖重新排列指令,以便消除因數(shù)據(jù)未緒造成的執(zhí)行停頓.這可以幫助浮點(diǎn)運(yùn)算或內(nèi)存訪問(wèn) 較慢的機(jī)器調(diào)取指令,允許其他指令先執(zhí)行,直到調(diào)取指令或浮點(diǎn)運(yùn)算完成.
- -fschedule-insns2
- 類似于`-fschedule-insns'選項(xiàng),但是在寄存器分配完成后,需要一個(gè)額外的指令調(diào)度過(guò)程.對(duì)于 寄存器數(shù)目相對(duì)較少,而且取內(nèi)存指令大于一個(gè)周期的機(jī)器,這個(gè)選項(xiàng)特別有用.
目標(biāo)機(jī)選項(xiàng)(TARGET OPTION)
缺省情況下, GNU CC編譯出本機(jī)類型的目標(biāo)碼.然而也可以把他安裝成交叉編譯器, 為其他機(jī)型編譯程序.事實(shí)上,針對(duì)不同的目標(biāo)機(jī),可以同時(shí)安裝GNU CC相應(yīng)的配置.然后用`-b'選項(xiàng)指定 目標(biāo)機(jī)種.
順便提一下,新版本和舊版本的GNU CC可以共存.其中一個(gè)版本(可能是最新的那個(gè))為缺省版本,但是有時(shí)候你希望使用 其他版本.
- -b machine
- 參數(shù)machine指出編譯的目標(biāo)機(jī)種.這個(gè)選項(xiàng)用于安裝為交叉編譯器的GNU CC.
參數(shù)machine的值和配置GNU CC交叉編譯器時(shí)設(shè)置的機(jī)器類型一樣.例如,如果交叉編譯器配置有 `configure i386v',意思是編譯80386上的System V目標(biāo)碼,那么你可以通過(guò)`-b i386v'運(yùn)行交叉編譯器.
如果沒有指定`-b'選項(xiàng),通常指編譯本機(jī)目標(biāo)碼.
- -V version
- 參數(shù)version指出運(yùn)行哪個(gè)版本的GNU CC.這個(gè)選項(xiàng)用于安裝了多個(gè)版本的GCC.例如,如果 version是`2.0',意味著運(yùn)行GNU CC 2.0版.
如果沒有指定`-V'選項(xiàng),缺省版本取決于GNU CC的安裝方式,一般說(shuō)來(lái)推薦使用通用版本.