gcc/g++ 命令參數(shù)

????????gcc/g++ 在執(zhí)行編譯時(shí),需要4步

  1.預(yù)處理,生成.i的文件[使用-E參數(shù)]

  2.將預(yù)處理后的文件轉(zhuǎn)換成匯編語(yǔ)言,生成文件.s[使用-S參數(shù)]

  3.由匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.o的文件[使用-c參數(shù)]

  4.連接目標(biāo)代碼,生成可執(zhí)行程序[使用-o參數(shù)]


-x language filename

設(shè)定文件所使用的語(yǔ)言,使后綴名無(wú)效,對(duì)以后的多個(gè)有效.也就是根據(jù)約定,C語(yǔ)言的后綴名稱(chēng)是.c的,而C++的后綴名是.C或.cpp,如果你非常個(gè)性,決定你的C代碼文件的后綴名是.pig 哈哈,那你就要用這個(gè)參數(shù),這個(gè)參數(shù)對(duì)他后面的文件名都起作用,除非到了下一個(gè)參數(shù)的使用。能使用的參數(shù)有下面的這些:

`c’, `objective-c’, `c-header’, `c++’, `cpp-output’, `assembler’, and `assembler-with-cpp’.

看到英文,應(yīng)該能理解的。

例子用法: cd..

gcc -x c hello.pig

-x none filename

關(guān)掉上一個(gè)選項(xiàng),也就是讓gcc根據(jù)文件名后綴,自動(dòng)識(shí)別文件類(lèi)型

例子用法:

gcc -x c hello.pig -x none hello2.c

-c

只激活預(yù)處理,編譯,和匯編,也就是他只把程式做成obj文件

例子用法:

gcc -c hello.c

他將生成.o的obj文件

-S

只激活預(yù)處理和編譯,就是指把文件編譯成為匯編代碼。

例子用法

gcc -S hello.c

他將生成.s的匯編代碼,你能用文本編輯器察看

-E

只激活預(yù)處理,這個(gè)不生成文件,你需要把他重定向到一個(gè)輸出文件里面.

例子用法:

gcc -E hello.c > pianoapan.txt

gcc -E hello.c | more

慢慢看吧,一個(gè)hello word 也要預(yù)處理成800行的代碼

-o

制定目標(biāo)名稱(chēng),缺省的時(shí)候,gcc 編譯出來(lái)的文件是a.out,非常難聽(tīng),如果你和我有同感,改掉他,哈哈

例子用法

gcc -o hello.exe hello.c (哦,windows用習(xí)慣了)

gcc -o hello.asm -S hello.c

-pipe

使用管道代替編譯中臨時(shí)文件,在使用非gnu匯編工具的時(shí)候,可能有些問(wèn)題

gcc -pipe -o hello.exe hello.c

-ansi

關(guān)閉gnu c中和ansi c不兼容的特性,激活ansi c的專(zhuān)有特性(包括禁止一些asm inline typeof關(guān)鍵字,及UNIX,vax等預(yù)處理宏

-include file

包含某個(gè)代碼,簡(jiǎn)單來(lái)說(shuō),就是便于某個(gè)文件需要另一個(gè)文件的時(shí)候,就能用他設(shè)

定,功能就相當(dāng)于在代碼中使用#i nclude

例子用法:

gcc hello.c -include /root/pianopan.h

-imacros file

將file文件的宏,擴(kuò)展到gcc/g++的輸入文件,宏定義本身并不出目前輸入文件中

-Dmacro

相當(dāng)于C語(yǔ)言中的#define macro

-Dmacro=defn

相當(dāng)于C語(yǔ)言中的#define macro=defn

-Umacro

相當(dāng)于C語(yǔ)言中的#undef macro

-undef

取消對(duì)所有非標(biāo)準(zhǔn)宏的定義

-Idir

在你是用#i nclude"file"的時(shí)候,gcc/g++會(huì)先在當(dāng)前目錄查找你所制定的頭文件,如

果沒(méi)有找到,他回到缺省的頭文件目錄找,如果使用-I制定了目錄,他

回先在你所制定的目錄查找,然后再按常規(guī)的順序去找.

對(duì)于#i nclude,gcc/g++會(huì)到-I制定的目錄查找,查未找到,然后將到系統(tǒng)的缺

省的頭文件目錄查找

-I-

就是取消前一個(gè)參數(shù)的功能,所以一般在-Idir之后使用

-idirafter dir

在-I的目錄里面查找失敗,講到這個(gè)目錄里面查找.

-iprefix prefix

-iwithprefix dir

一般一起使用,當(dāng)-I的目錄查找失敗,會(huì)到prefix+dir下查找

-nostdinc

使編譯器不再系統(tǒng)缺省的頭文件目錄里面找頭文件,一般和-I聯(lián)合使用,明確限定頭

文件的位置

-nostdin C++

規(guī)定不在g++指定的標(biāo)準(zhǔn)路經(jīng)中搜索,但仍在其他路徑中搜索,.此選項(xiàng)在創(chuàng)libg++庫(kù)

使用

-C

在預(yù)處理的時(shí)候,不刪除注釋信息,一般和-E使用,有時(shí)候分析程式,用這個(gè)非常方便的

-M

生成文件關(guān)聯(lián)的信息。包含目標(biāo)文件所依賴(lài)的所有原始碼你能用gcc -M hello.c

來(lái)測(cè)試一下,非常簡(jiǎn)單。

-MM

和上面的那個(gè)相同,不過(guò)他將忽略由#i nclude造成的依賴(lài)關(guān)系。

-MD

和-M相同,不過(guò)輸出將導(dǎo)入到.d的文件里面

-MMD

和-MM相同,不過(guò)輸出將導(dǎo)入到.d的文件里面

-Wa,option

此選項(xiàng)傳遞option給匯編程式;如果option中間有逗號(hào),就將option分成多個(gè)選項(xiàng),然

后傳遞給會(huì)匯編程式

-Wl.option

此選項(xiàng)傳遞option給連接程式;如果option中間有逗號(hào),就將option分成多個(gè)選項(xiàng),然

后傳遞給會(huì)連接程式.

-llibrary

制定編譯的時(shí)候使用的庫(kù)

例子用法

gcc -lcurses hello.c

使用ncurses庫(kù)編譯程式

-Ldir

制定編譯的時(shí)候,搜索庫(kù)的路徑。比如你自己的庫(kù),能用他制定目錄,不然

編譯器將只在標(biāo)準(zhǔn)庫(kù)的目錄找。這個(gè)dir就是目錄的名稱(chēng)。

-O0

-O1

-O2

-O3

編譯器的優(yōu)化選項(xiàng)的4個(gè)級(jí)別,-O0表示沒(méi)有優(yōu)化,-O1為缺省值,-O3優(yōu)化級(jí)別最高

-g

只是編譯器,在編譯的時(shí)候,產(chǎn)生調(diào)試信息。

-gstabs

此選項(xiàng)以stabs格式聲稱(chēng)調(diào)試信息,不過(guò)不包括gdb調(diào)試信息.

-gstabs+

此選項(xiàng)以stabs格式聲稱(chēng)調(diào)試信息,并且包含僅供gdb使用的額外調(diào)試信息.

-ggdb

此選項(xiàng)將盡可能的生成gdb的能使用的調(diào)試信息.

-static

此選項(xiàng)將禁止使用動(dòng)態(tài)庫(kù),所以,編譯出來(lái)的東西,一般都非常大,也不必什么

動(dòng)態(tài)連接庫(kù),就能運(yùn)行.

-shared

此選項(xiàng)將盡量使用動(dòng)態(tài)庫(kù),所以生成文件比較小,不過(guò)需要系統(tǒng)由動(dòng)態(tài)庫(kù).

-traditional

試圖讓編譯器支持傳統(tǒng)的C語(yǔ)言特性

-Wall

顯示所有警告信息(warning all)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章:編譯和安裝SCons第二章:簡(jiǎn)單編譯第三章:編譯相關(guān)的一些事情第四章:編譯和鏈接庫(kù)文件第五章:節(jié)點(diǎn)對(duì)象第六...
    仙靈兒閱讀 12,354評(píng)論 0 3
  • GCC編譯器 GCC是一個(gè)交叉平臺(tái)的編譯器,我想大家并不會(huì)覺(jué)得陌生。C/C++開(kāi)發(fā)的時(shí)候很多時(shí)候都會(huì)用到GCC來(lái)進(jìn)...
    故事狗閱讀 9,575評(píng)論 0 25
  • 本手冊(cè)頁(yè)內(nèi)容摘自 GNU C 編譯器的完整文檔,僅限于解釋選項(xiàng)的含義.如果發(fā)現(xiàn)手冊(cè)頁(yè)和Info 文件之間有所矛盾,...
    極客圈閱讀 2,137評(píng)論 0 5
  • 大略的游玩杭州后 坐著大巴 來(lái)到了嘉興西塘 沒(méi)有選擇烏鎮(zhèn)的原因是因?yàn)?西塘更適合年輕人 白天的西塘 比蘇州同里古鎮(zhèn)...
    呵呵噗哈哈閱讀 371評(píng)論 2 2
  • 今天放學(xué)回來(lái),第一件事,女兒告訴她媽媽新買(mǎi)的彩筆丟了八根,這讓她媽媽很惱火,女兒又挨了罵,我下班回來(lái),也知...
    包先生的日記k閱讀 766評(píng)論 1 6

友情鏈接更多精彩內(nèi)容