GCC命令選項簡介

gcc命令的選項多達上百個,分別對應不一樣的功能,這裏就一些平時比較經常使用的選項作簡要解釋,詳細的gcc命令解釋請自行查看手冊:man gcc。緩存

從源代碼文件生成可執行文件的過程

首先須要明白的是,gcc對源代碼文件的編譯分爲四個過程,分別是預處理,編譯,彙編,鏈接。鏈接以後生成可執行文件。工具

每個過程對應的選項是:性能

預處理:-E 這一步產生輸出到標準輸出,也就是說默認是輸出到屏幕上,因此要加上-o選項,通常-o選項後面跟的文件名以.i結尾(.i結尾的文件爲gcc的C語言預處理文件)。優化

編譯:-S 這一步的輸入文件是預處理文件,默認輸出文件是以.s結尾的彙編語言文件。若是不加-o選項,產生的彙編語言文件與輸入的預處理文件同名。ui

彙編:-c 這一步的輸入文件爲彙編語言文件,默認輸出文件是以.o結尾的目標文件。若是不加-o選項,產生的目標文件與輸入的彙編語言文件同名。調試

gcc命令後能夠跟一個目標文件,若是不加-o選項,默認產生一個文件名爲a.out的可執行文件。另外,gcc命令後能夠直接跟一個.c源程序文件,這樣能夠不用手動執行以上步驟,直接生產可執行文件,而且不產生多餘的文件輸出。內存

優化選項

-O:加上這個選項能夠控制程序編譯過程當中的優化級別,固然優化的代價是付出更多的編譯時間。下面分別介紹它的優化級別:編譯器

-O0:效果等同於不加-O選項,即不對代碼作任何程度的優化。編譯

-O1:這是最基本的優化等級。編譯器會在不花費太多編譯時間的同時試圖生成更快更小的代碼。這些優化是很是基礎的,但通常這些任務確定能順利完成。基礎

-O2:-O1的進階。這是推薦的優化等級,除非你有特殊的需求。-O2會比-O1啓用多一些標記。設置了-O2後,編譯器會試圖提升代碼性能而不會增大致積和大量佔用的編譯時間。

-O3:這是最高最危險的優化等級。用這個選項會延長編譯代碼的時間,而且在使用gcc4.x的系統裏不該全局啓用。自從3.x版本以來gcc的行爲已經有了極大 地改變。在3.x,-O3生成的代碼也只是比-O2快一點點而已,而gcc4.x中還未必更快。用-O3來編譯全部的軟件包將產生更大致積更耗內存的二進 制文件,大大增長編譯失敗的機會或不可預知的程序行爲(包括錯誤)。這樣作將得不償失,記住過猶不及。在gcc 4.x.中使用-O3是不推薦的。

-Os:這個等級用來優化代碼尺寸。其中啓用了-O2中不會增長磁盤空間佔用的代碼生成選項。這對於磁盤空間極其緊張或者CPU緩存較小的機器很是有用。但也可能產生些許問題,所以軟件樹中的大部分ebuild都過濾掉這個等級的優化。使用-Os是不推薦的。

其餘經常使用選項

-g:啓用這個選項會在最後生成的可執行文件中包含源代碼的符號信息,這樣才能在後續過程當中使用gdb等調試工具對程序進行調試。

-Wall:這個選項表示在編譯源代碼的過程當中報告其中出現的警告信息,不開啓此選項的話gcc默承認能會忽略某些編譯過程當中出現的警告。

-Werror:開啓此選項後,gcc在編譯源代碼的時候不止會捕獲全部的警告信息,並且在遇到警告時會中止編譯。開啓次選項的目的主要在於提升代碼的書寫質量。

-I:此選項後面一個目錄。默認狀況下,gcc會從系統的頭文件目錄(Linux下是/usr/include/)下搜索頭文件,加上此選項後,此選項後面所跟着的目錄也會被列入頭文件搜索路徑。

相關文章
相關標籤/搜索