01. 命令概述
gcc命令使用GNU推出的基于C/C++的編譯器,是開放源代碼領(lǐng)域應(yīng)用最廣泛的編譯器,具有功能強(qiáng)大,編譯代碼支持性能優(yōu)化等特點(diǎn)。
gcc是GNU編譯器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go語(yǔ)言和D語(yǔ)言的前端,也包括了這些語(yǔ)言的庫(kù)(如libstdc++、libgcj等等)。GCC的初衷是為GNU操作系統(tǒng)專門編寫的一款編譯器。GNU系統(tǒng)是徹底的自由軟件。此處,“自由”的含義是它尊重用戶的自由。
02. 命令格式
用法:gcc [選項(xiàng)] 文件...
03. 常用選項(xiàng)
-pass-exit-codes 在某一階段退出時(shí)返回最高的錯(cuò)誤碼
--help 顯示此幫助說(shuō)明
--target-help 顯示目標(biāo)機(jī)器特定的命令行選項(xiàng)
--help={common|optimizers|params|target|warnings|[^]
{joined|separate|undocumented}}[,...]
顯示特定類型的命令行選項(xiàng)
(使用‘-v --help'顯示子進(jìn)程的命令行參數(shù))
--version 顯示編譯器版本信息
-dumpspecs 顯示所有內(nèi)建 spec 字符串
-dumpversion 顯示編譯器的版本號(hào)
-dumpmachine 顯示編譯器的目標(biāo)處理器
-print-search-dirs 顯示編譯器的搜索路徑
-print-libgcc-file-name 顯示編譯器伴隨庫(kù)的名稱
-print-file-name=<庫(kù)> 顯示 <庫(kù)> 的完整路徑
-print-prog-name=<程序> 顯示編譯器組件 <程序> 的完整路徑
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory 顯示不同版本 libgcc 的根目錄
-print-multi-lib 顯示命令行選項(xiàng)和多個(gè)版本庫(kù)搜索路徑間的映射
-print-multi-os-directory 顯示操作系統(tǒng)庫(kù)的相對(duì)路徑
-print-sysroot 顯示目標(biāo)庫(kù)目錄
-print-sysroot-headers-suffix 顯示用于尋找頭文件的 sysroot 后綴
-Wa,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給匯編器
-Wp,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給預(yù)處理器
-Wl,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給鏈接器
-Xassembler <參數(shù)> 將 <參數(shù)> 傳遞給匯編器
-Xpreprocessor <參數(shù)> 將 <參數(shù)> 傳遞給預(yù)處理器
-Xlinker <參數(shù)> 將 <參數(shù)> 傳遞給鏈接器
-save-temps 不刪除中間文件
-save-temps=<arg> 不刪除中間文件
-no-canonical-prefixes 生成其他 gcc 組件的相對(duì)路徑時(shí)不生成規(guī)范化的
前綴
-pipe 使用管道代替臨時(shí)文件
-time 為每個(gè)子進(jìn)程計(jì)時(shí)
-specs=<文件> 用 <文件> 的內(nèi)容覆蓋內(nèi)建的 specs 文件
-std=<標(biāo)準(zhǔn)> 指定輸入源文件遵循的標(biāo)準(zhǔn)
--sysroot=<目錄> 將 <目錄> 作為頭文件和庫(kù)文件的根目錄
-B <目錄> 將 <目錄> 添加到編譯器的搜索路徑中
-v 顯示編譯器調(diào)用的程序
-### 與 -v 類似,但選項(xiàng)被引號(hào)括住,并且不執(zhí)行命令
-E 僅作預(yù)處理,不進(jìn)行編譯、匯編和鏈接
-S 編譯到匯編語(yǔ)言,不進(jìn)行匯編和鏈接
-c 編譯、匯編到目標(biāo)代碼,不進(jìn)行鏈接
-o <文件> 輸出到 <文件>
-pie Create a position independent executable
-shared Create a shared library
-x <語(yǔ)言> 指定其后輸入文件的語(yǔ)言
允許的語(yǔ)言包括:c c++ assembler none
‘none'意味著恢復(fù)默認(rèn)行為,即根據(jù)文件的擴(kuò)展名猜測(cè)
源文件的語(yǔ)言
04. 參考示例
4.1 生成默認(rèn)的可執(zhí)行文件
[deng@localhost bak]$ gcc test.c
[deng@localhost bak]$
將test.c預(yù)處理、匯編、編譯并鏈接形成可執(zhí)行文件。這里未指定輸出文件,默認(rèn)輸出為a.out。
4.2 指定輸出文件
[deng@localhost bak]$ gcc test.c -o test
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c
[deng@localhost bak]$
將test.c預(yù)處理、匯編、編譯并鏈接形成可執(zhí)行文件test。-o選項(xiàng)用來(lái)指定輸出文件的文件名。
4.3 僅作預(yù)處理,不進(jìn)行編譯、匯編和鏈接
[deng@localhost bak]$ gcc -E test.c -o test.i
[deng@localhost bak]$
將test.c預(yù)處理輸出test.i文件。
4.4 編譯到匯編語(yǔ)言,不進(jìn)行匯編和鏈接
[deng@localhost bak]$ gcc -S test.c -o test.s
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.s
[deng@localhost bak]$
將預(yù)處理輸出文件test.i匯編成test.s文件。
4.5 編譯、匯編到目標(biāo)代碼,不進(jìn)行鏈接
[deng@localhost bak]$ gcc -c test.c -o test.o
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.o test.s
[deng@localhost bak]$
4.6 將目標(biāo)代碼生成可執(zhí)行文件
[deng@localhost bak]$ gcc test.o -o test
[deng@localhost bak]$
將編譯輸出文件test.o鏈接成最終可執(zhí)行文件test。
4.7 編譯時(shí)指定優(yōu)化級(jí)別
[deng@localhost bak]$ gcc -O1 test.c -o test
[deng@localhost bak]$
使用編譯優(yōu)化級(jí)別1編譯程序。級(jí)別為1~3,級(jí)別越大優(yōu)化效果越好,但編譯時(shí)間越長(zhǎng)。
4.8 多文件編譯
[deng@localhost bak]$ gcc testfun.c test.c -o test
[deng@localhost bak]$
將testfun.c和test.c分別編譯后鏈接成test可執(zhí)行文件。
4.9 多文件編譯方法二
[deng@localhost bak]$ gcc -c test.c
[deng@localhost bak]$ gcc -c testfun.c
[deng@localhost bak]$ gcc test.o testfun.o -o test
[deng@localhost bak]$
到此這篇關(guān)于Linux gcc命令的具體使用的文章就介紹到這了,更多相關(guān)Linux gcc命令內(nèi)容請(qǐng)搜素腳本之家以前的文章或下面相關(guān)文章,希望大家以后多多支持腳本之家!