LinuxGCC工程 管理 器

在工作过程中只使用一个命令编译的效率一定不高,所以接下来的任务就是学习用其他的方法来完善GCC,来提高编译效率。

为了提高编译程序的效率,很多基于 Windows 平台上的开发工具都提供了工程管理器。
用户只需要点击一个“make”按钮就可以启动工程管理器对整个程序进行自动编译。在整个编译的过程中是不需要人工干预的。这种工程管理器形象的称为全自动工程管理器。
GCC 提供了半自动化的工程管理器 Make。所谓半自动化是指在使用工程管理器前需要
人工编写程序的编译规则。所有的编译规则都保存在 Makefile 文件中。全自动化的工程管理器在编译程序前会自动生成 Makefile 文件。
Make 工程管理器的优越性具体体现在以下两个方面。
(1)使用方便
通过命令“make”就可以启动 Make 工程管理器对程序进行编译,所以不再需要每次都
输入 gcc 命令行。Make 启动后会根据 Makefile 文件中的编译规则命令自动对源文件进行编译和链接,最终生成可执行文件。
(2)调试效率高
为了提高编译程序的效率,Make 会检查每个源文件的修改时间(时间戳)。只有在上次
编译之后被修改的源文件才会在接下来的编译过程中被编译和链接,这样就能避免多余的编译工作量。为了保证源文件具有正确的时间戳,必须保证操作系统时间的正确性(注意VMWare 虚拟机的 CMOS 时间是否正确)。
Makefile
Make工程管理器是完全根据Makefile文件中的编译规则命令进行工作的。Makefile 文
件由以下三项基本内容组成。
1)需要生成的目标文件(target file)。
2)生成目标文件所需要的依赖文件(dependency file)。
3)生成目标文件的编译规则命令行(command)。
其中,Makefile 规定在书写 command 命令行前必须加一个键。
Make 工程管理器在编译程序时会检查每个依赖文件的时间戳,一旦发现某个依赖文件
的时间戳比目标文件要新,就会执行目标文件的规则命令来重新生成目标文件。这个过程称为目标文件的依赖规则检查。依赖规则检查是 Make 工程管理器的最核心的工作任务之一。
Makefile 特性介绍
源文件数量越是多的程序,其编译规则就会越复杂,导致 Makefile 文件也越复杂。为
了简化 Makefile 的编写,丰富编译程序的方法和手段。Makefile 提供了很多类似高级编程语言的语法机制。

  1. 变量
    在 Makefile 文件中,存在着大量的文件名,而且这些文件名都是重复出现的。所以在
    源文件比较多的情况下,很容易发生遗漏或写错文件名。而且一旦源文件的名称发生了变化,还容易造成与其他文件名不一致的错误。于是,Makefile 提供了变量来代替文件名。
    变量的使用方式为:
    $ $ (变量名)
    (1)通过“=”来实现
    (2)通过“:=”来实现
    (3)通过“+=”来实现
    (4)通过“?=”来实现

  2. 自动推导
    为了进一步简化 Makefile 的书写,Make 工程管理器提供了自动推导的功能。自动推导
    功能默认每个目标文件都有一个与之对应的依赖文件。比如 a.o 文件有依赖文件 a.c 与之对应)。这样在 Makefile 中就不需要指定与目标文件对应的依赖文件名了。此外,自动推导功能还能推导出与目标文件对应的基本编译规则命令。比如 a.o 文件的规则命令为“gcc –c–o a.c”。

  3. 伪目标
    伪目标不是真正的目标文件,所以通过伪目标可以让 Make 工程管理器只执行规则命令,
    而不用创建实际的目标文件。
    伪目标的使用方式为:
    make 伪目标名
    (1)all
    (2)clean
    (3)install
    (4)uninstall

  4. 文件查找
    (1)VPATH
    (2)vpath

  5. 嵌套执行
    如果把所有源文件的编译规则命令都写在一个Makefile中,会造成Makefile过于臃肿,
    为编写和修改带来了很大的不便。解决这个问题的办法是把 Makefile 分解成多个子
    Makefile,并放置到程序的每个子目录中,每个子 Makefile 文件负责所在目录下源文件的编译工作。
    Make 工程管理器会首先读取程序根目录下的 Makefile 文件(总控 Makefile),然后再
    去读取各个目录中的子 Makefile 文件。这个过程就称为 Make 的嵌套执行。
    嵌套执行的使用方法为:
    cd 子目录 && ( M A K E ) (MAKE)或: (MAKE) –c c 子目录

  6. 条件判断
    和 C 语言的条件编译类似,Make 工程管理器也可以在运行时对条件进行判断,然后进入条件分支继续编译。

  7. 函数
    对于编程语言来说,函数的作用是非常重要的。为此,Make 工程管理器也引入了函数
    机制,以丰富 Make 控制编译过程的方法。和变量一样,函数也用符号$进行标识。
    其使用格式为:
    $ $ (函数名 参数 ,参数 „ )
    其中函数名和参数之间用空格隔开,参数与参数之间用逗号隔开。

从这次学习中我了解到了GCC编译的缺陷与修改方法,对于之后的学习还要更加努力。

猜你喜欢

转载自blog.csdn.net/Chame1eos/article/details/82866711