gcc和makefile(二)

来源:互联网 发布:摇色子软件 编辑:程序博客网 时间:2024/05/18 00:45

工程管理器

在实际的开发过程中,仅仅通过使用gcc命令对程序进行编译是非常低效的。原因主要有以下两点。
1)程序往往是由多个源文件组成的,源文件的个数越多,那么gcc的命令行就会越长。此外,各种编译规则也会加大gcc命令行的复杂度。所以在开发调试程序的过程中,通过输入gcc命令行来编译程序是很麻烦的。
2)在程序的整个开发过程中,调试的工作量占到了整体工作量的70%以上。在调试程序的过程中,每次调试一般只会修改部分源文件。而在使用gcc命令行编译程序时,gcc会把那些没有被修改的源文件一起编译,这样就会影响编译的总体效率。
为了提高编译程序的效率,很多基于Windows平台上的开发工具都提供了工程管理器。用户只需要点击一个“make”按钮就可以启动工程管理器对整个程序进行自动编译。在整个编译的过程中是不需要人工干预的。这种工程管理器形象的称为全自动工程管理器。
GCC提供了半自动化的工程管理器Make。所谓半自动化是指在使用工程管理器前需要人工编写程序的编译规则。所有的编译规则都保存在Makefile文件中。全自动化的工程管理器在编译程序前会自动生成Makefile文件。

Make工程管理器的优越性具体体现在以下两个方面

1)使用方便
通过命令“make”就可以启动Make工程管理器对程序进行编译,所以不再需要每次都输入gcc命令行。Make启动后会根据Makefile文件中的编译规则命令自动对源文件进行编译和链接,最终生成可执行文件。
2)调试效率高
为了提高编译程序的效率,Make会检查每个源文件的修改时间(时间戳)。只有在上次编译之后被修改的源文件才会在接下来的编译过程中被编译和链接,这样就能避免多余的编译工作量。为了保证源文件具有正确的时间戳,必须保证操作系统时间的正确性(注意VMWare虚拟机的CMOS时间是否正确)。


make和makefile的关系是make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令。

makefile:
makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是--“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
makefile的产生:
对于很大的项目来说,自己手写Makefile非常麻烦,而标准的GNU软件(如Apacle)都是运行一个configure脚本文件来产生Makefile;GNU软件automake和autoconf就是自动生成configure的工具。开发人员只需要先定义好宏,automake处理后会产生供autoconf使用的Makefine.in,再用autoconf就可以产生configure。
make命令:
1)make
根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。 
2)make clean 
清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。 
3)make install 
将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。 
4)make dist 
产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。 它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。 
5)make distcheck 
生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。 
6)make distclean 
类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile文件。 




原创粉丝点击