为了提高编译程序的效率,很多基于Windows平台上的开发工具都提供了工程管理器。用户只需要点击一个“make"按钮就可以启动工程管理器对整个程序进行自动编译。在整个编译的过程中是不需要人工干预的。这种工程管理器形象的称为全自动工程管理器。
GCC提供了半自动化的工程管理器Make, 所谓半自动化是指在使用工程管理器前需要人工编写程序的编译规则。所有的编译规则都保存在Makefile文件中。全自动化的工程管理器在编译程序前会自动生成Makefile文件。
Make工程管理器的优越性具体体现在以下两个方面。
(1) 使用方便
通过命令“make"就可以启动Make工程管理器对程序进行编译,所以不再需要每次都输入gcc命令行。Make启动后会根据Makefile文件中的编译规则命令自动对源文件进行编译和链接,最终生成可执行文件。
(2) 调试效率高
为了提高编译程序的效率,Make会检查每个源文件的修改时间(时间戳) 。只有在上次编译之后被修改的源文件才会在接下来的编译过程中被编译和链接,这样就能避免多余的编译工作量,为了保证源文件具有正确的时间戳,必须保证操作系统时间的正确性 (注意VMWare虚拟机的CMOS时间是否正确)。
Makefile
Make工程管理器是完全根据Makefile文件中的编译规则命令进行工作的。Makefie文件由以下三项基本内容组成。
-
需要生成的目标文件target file)。
-
生成目标文件所需要的依赖文件 (dependency file)。
-
生成目标文件的编译规则命令行 (command)。Makefile 规定在书写 command 命令行前必须加一个 Tab 键。
Make工程管理器编译 test 程序的过程如下:
(1) Make工程管理器首先会在当前目录下读取Makefile文件。
(2)查找Makefile文件中的第一个目标文件, 该文件也是Make工程管理器本次编译任务的最终目标。
(3)把目标文件 test 的依赖文件当作目标文件进行依赖规则检查。这是一个递归的检查过程。