本节书摘来自华章出版社《深入分析GCC 》一书中的第3章,第3.1节,作者 王亚刚 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第3章

GCC总体结构
GCC是一个复杂的软件系统,例如gcc-4.4.0.tar.gz软件包中包含了成千上万个文件。本章主要对GCC的代码结构和目录结构进行介绍,阐明GCC的主要模块及其相互关系,并给出GCC源代码编译的主要步骤和关键问题。
3.1 GCC的目录结构
GCC的源代码可以从GCC的官网(https://gcc.gnu.org)上获得。该源代码包主要包括bz2和gz两种压缩形式的tar包,以gcc-4.4.0为例,分别为gcc-4.4.0.tar.bz2及gcc-4.4.0.tar.gz。
可以通过如下的命令获取gcc-4.4.0.tar.bz2代码,进行源代码包的解压,并查看其主要的目录结构。

[GCC@host2 gcc-4.4.0]$ wget -c http://www.netgull.com/gcc/releases/gcc-4.4.0/gcc-4.4.0.tar.bz2
[GCC@host2 gcc-4.4.0]$ tar -xjvf gcc-4.4.0.tar.bz2
[GCC@host2 gcc-4.4.0]$ cd gcc-4.4.0; ls
ABOUT-NLS           COPYING.LIB      libgfortran      MAINTAINERS
boehm-gc            COPYING.RUNTIME  libgomp          maintainer-scripts
ChangeLog           depcomp          libiberty        Makefile.def
ChangeLog.tree-ssa  fixincludes      libjava          Makefile.in
compile             gcc              libmudflap       Makefile.tpl
config              gnattools        libobjc          MD5SUMS
config.guess        include          libssp           missing
config-ml.in        INSTALL          libstdc++-v3     mkdep
config.rpath        install-sh       libtool-ldflags  mkinstalldirs
config.sub          intl             libtool.m4       move-if-change
configure           LAST_UPDATED     ltgcc.m4         NEWS
configure.ac        libada           ltmain.sh        README
contrib             libcpp           lt~obsolete.m4   symlink-tree
COPYING             libdecnumber     ltoptions.m4     tags
COPYING3            libffi           ltsugar.m4       ylwrap
COPYING3.LIB        libgcc           ltversion.m4     zlib

该源代码目录中的主要内容包括:
(1)与GCC编译配置有关的conf?ig*文件。
(2)lib*目录:各种各样的库文件,既包括一些通用的库文件,也包含一些与语言相关的库文件,例如libcpp中包含与C++语言相关的代码库文件,libada中包含与ADA语言相关的代码库文件。
(3)gcc目录中包含GCC的核心代码,包括了与各种编程语言相关的词法、语法等前端分析程序,与各种目标机器相关的机器描述文件,以及与前端语言无关且与机器无关的核心处理代码等。
使用如下shell命令可以列出gcc目录中的所有子目录,其中包含如下的一些子目录:

[GCC@host2 gcc-4.4.0]$ ls -l gcc | grep ^d
drwxrwxr-x.  3 GCC GCC   69632 Apr 21  2009 ada
drwxrwxr-x. 37 GCC GCC    4096 Apr 21  2009 config
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 cp
drwxrwxr-x.  3 GCC GCC    4096 Apr 21  2009 doc
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 fortran
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 ginclude
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 java
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 objc
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 objcp
drwxrwxr-x.  2 GCC GCC    4096 Apr 21  2009 po
drwxrwxr-x. 18 GCC GCC    4096 Apr 21  2009 testsuite

gcc目录下的gcc/cp、gcc/fortran、gcc/java、gcc/objc、gcc/objcp等子目录就是与各种编程语言相关的处理部分,这几个目录分别处理编程语言C++、Fortran、Java、Object C、Object C++等,C语言的处理则是GCC默认的处理前端语言,其部分处理代码在gcc/目录中。
进一步查看gcc/conf?ig目录中所包含的子目录:

[GCC@host2 gcc-4.4.0]$ ls -l gcc/config | grep ^d
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 alpha
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 arc
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 arm
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 avr
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 bfin
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 cris
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 crx
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 fr30
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 frv
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 h8300
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 i386
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 ia64
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 iq2000
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m32c
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m32r
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m68hc11
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 m68k
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mcore
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mips
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mmix
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 mn10300
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 pa
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 pdp11
drwxrwxr-x. 3 GCC GCC  4096 Apr 21  2009 picochip
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 rs6000
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 s390
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 score
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 sh
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 soft-fp
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 sparc
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 spu
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 stormy16
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 v850
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 vax
drwxrwxr-x. 2 GCC GCC  4096 Apr 21  2009 xtensa

从目录的名称上就可以看出来,这些目录分别对应了各种不同的目标机器名称。目录中包含的内容就是针对不同目标机器的机器描述文件,包括md文件及相应的c文件和h文件等。例如i386目录中包含了Intel x86处理器的机器描述文件等,arm目录中则包含了ARM处理器的机器描述文件等。
完整的目录结构说明请查阅GCC相关说明文档。也可以参考Uday Khedker的《GCC Source Code: An Internal View》(http://www.cse.iitb.ac.in/grc/)。

《深入分析GCC 》——第3章 GCC总体结构3.1 GCC的目录结构相关推荐

  1. Linux源码的目录结构和Linux文件系统的目录结构

    Linux源码的目录结构和Linux文件系统的目录结构 我是一个小白,最近找工作找到是一份驱动方面的工作,刚从学校毕业出来啥也不懂.个人觉得首先了解的就是一个工程的目录下的文件分别表示什么,所以看了别 ...

  2. 操作系统之文件管理:3、文件目录(文件控制块FCB、多级目录结构、无环图目录结构、索引节点)

    3.文件目录 思维导图 文件控制块FCB 目录操作 目录结构 单级目录结构 两级目录结构 多级目录结构(树形目录结构) 无环图目录结构 索引结点(FCB的改进) 思维导图 文件控制块FCB 1.什么是 ...

  3. python顺序结构的关键字_Python1_Python的目录结构、执行顺序、__name__ == __main__

    Python执行顺序 python属于脚本语言,不像编译型的语言那样先将程序编译成二进制后再运行,而是动态地逐行解释运行: 也就是从脚本的第一行开始运行,没有统一的入口. python会从文件的第一行 ...

  4. 简述 Linux 文件系统的目录结构

    Linux文件系统结的结构是树形结构,其入口从/开始,了解Linux文件系统的结构,对于我们需要掌握的基础知识点之一. 1.什么是文件系统: 请参见:<Linux 文件系统概述> 2.文件 ...

  5. Linux目录结构及解释

    相关文章推荐 ★构建小型Linux跟文件系统镜像(Ext2 或 Ext3) ★linux内核源码目录结构 ★简述 Linux 文件系统的目录结构 ★Linux 内核源代码的结构 ★linux文件系统的 ...

  6. keil建立stm32工程即标准库函数目录结构

    建立keil stm32工程文件 1. 标准库函数目录结构 需要分清库函数和keil的pack包,前者是ST公司对ST系列芯片编写的库函数,其中包括芯片的的启动文件和外设配置函数文件,后者是Keil ...

  7. Electron教程-程序目录结构

    Electron教程-程序目录结构 程序目录结构 主进程 渲染进程 主进程模块目录 1.通用模块 2.日志模块 3.配置模块 4.进程通信模块 5.应用间通信模块 6.窗口管理模块 渲染进程模块目录 ...

  8. Vue项目目录结构介绍(三)

    前言 本章我们会对一个 Vue 项目的目录结构进行讲解,解释各子目录以及文件的作用,前端的模块化,Vue 单文件组件规范等. 1.基础目录和文件介绍 在上一章,我们通过 vue-cli 创建了一个新的 ...

  9. C语言GUI编程之数字记忆游戏——项目目录结构和初步的窗口布局

    目录 项目目录结构 创建项目 命名规范 目录结构 编程模式 MVC 实例 初步的窗口布局 效果 EasyX的使用 总结 项目目录结构 创建项目 在Visual Studio 2022中创建一个空白的项 ...

  10. Hadoop入门(上):大数据特点、大数据前景、大数据组织结构、Hadoop组成、Hadoop版本介绍、Hadoop运行环境搭建、CentOS6安装JDK、安装Hadoop、Hadoop目录结构

    资料来源于尚硅谷 本篇文章目录 第1章·大数据概论 1.1.大数据概念. 1.2.大数据特点(4V) 1.3.大数据应用场景 1.4.大数据发展前景 1.5·大数据部门业务流程分析. 1.6·大数据部 ...

最新文章

  1. git 分支合并到当前
  2. 计算机网络第三章-数据链路层
  3. 第18天学习Java的笔记-ArrayList
  4. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】...
  5. 用可编写脚本的终结点遍历REST应用程序
  6. 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析
  7. c++ 圆上任意点坐标计算_线性代数总结 第三章 向量代数与几何计算(空间平面和直线)...
  8. pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?
  9. java 值栈的结构_Struts2 | 深入浅出理解struts2中的值栈
  10. java dwg转pdf_CAD处理控件Aspose.CAD转换功能演示:使用Java将DWG和DXF文件转换为PDF...
  11. 多任务学习 Multi-task learning
  12. 什么是双线服务器?只是双线路接入?
  13. myanmar android2,Myanmar Thingyan Songs 2
  14. D3DCULL_CW 和 D3DCULL_CCW
  15. 十一个Python在线学习网站
  16. java存根_java – Mockito在测试方法之外的存根
  17. 没有实习经验的应届生如何找到一份数据分析类工作?
  18. 基因分子生物学~DNA双螺旋
  19. IP地址与子网掩码计算、划分子网
  20. 花样彩灯的c语言程序设计,单片机花样彩灯课程实施方案报告.doc

热门文章

  1. os.removedirs Directory not empty python
  2. Windows Hello指纹识别失败解决方法
  3. 小黄人变声专家 把自己声音变成小黄人的软件 小黄人快跑
  4. IOS-常用第三方开源框架介绍
  5. 华为数字化转型之道 平台篇 第十三章 变革治理体系
  6. OpenCV-矩阵归一化cv::normalize
  7. Linux命令(绝大部分)
  8. Python更换索引(Index)
  9. 南师C:狼抓兔子问题
  10. python destroy函数_Python Tkinter,destroy top-level after函数