天天看點

《深入分析GCC 》——第3章 GCC總體結構3.1 GCC的目錄結構

本節書摘來自華章出版社《深入分析gcc 》一書中的第3章,第3.1節,作者 王亞剛 ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

gcc總體結構

gcc是一個複雜的軟體系統,例如gcc-4.4.0.tar.gz軟體包中包含了成千上萬個檔案。本章主要對gcc的代碼結構和目錄結構進行介紹,闡明gcc的主要子產品及其互相關系,并給出gcc源代碼編譯的主要步驟和關鍵問題。

3.1 gcc的目錄結構

可以通過如下的指令擷取gcc-4.4.0.tar.bz2代碼,進行源代碼包的解壓,并檢視其主要的目錄結構。

該源代碼目錄中的主要内容包括:

(1)與gcc編譯配置有關的conf?ig*檔案。

(2)lib*目錄:各種各樣的庫檔案,既包括一些通用的庫檔案,也包含一些與語言相關的庫檔案,例如libcpp中包含與c++語言相關的代碼庫檔案,libada中包含與ada語言相關的代碼庫檔案。

(3)gcc目錄中包含gcc的核心代碼,包括了與各種程式設計語言相關的詞法、文法等前端分析程式,與各種目标機器相關的機器描述檔案,以及與前端語言無關且與機器無關的核心處理代碼等。

使用如下shell指令可以列出gcc目錄中的所有子目錄,其中包含如下的一些子目錄:

gcc目錄下的gcc/cp、gcc/fortran、gcc/java、gcc/objc、gcc/objcp等子目錄就是與各種程式設計語言相關的處理部分,這幾個目錄分别處理程式設計語言c++、fortran、java、object c、object c++等,c語言的處理則是gcc預設的處理前端語言,其部分處理代碼在gcc/目錄中。

進一步檢視gcc/conf?ig目錄中所包含的子目錄:

從目錄的名稱上就可以看出來,這些目錄分别對應了各種不同的目标機器名稱。目錄中包含的内容就是針對不同目标機器的機器描述檔案,包括md檔案及相應的c檔案和h檔案等。例如i386目錄中包含了intel x86處理器的機器描述檔案等,arm目錄中則包含了arm處理器的機器描述檔案等。