本节书摘来自华章出版社《深入分析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处理器的机器描述文件等。