makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
Make工程管理器的优越性有以下两个方面:
1.使用方便,通过命令Make就可以启动Make工程管理器对程序进行编译,所以 不再需要每次都输入gcc的命令行。Make启动后会根据Makefile文件中编译的规则命令自动的对源文件进行编译和链接,最终生成可以执行的文件。
2.编译的效率高,主要是因为一旦修改源文件后,Make的时候会检查每个源文件的时间戳,只有时间戳改变的源文件才会编译与链接,这样节省了很多的编译的时间。因为检查的是时间戳,所以操作系统的时间一定要正确性。
Makefile 主要有三项内容组成:
1.需要生成的目标文件(target)
2.生成目标文件需要依赖的文件(dependency file)
3.生成目标文件的编译规则命令(command)
举个例子:
//makefile:
test : a.o b.o //test来源于a.o、b.o 该make生成一个test的可执行文件
cc -o test a.o b.o //通过这个命令获得test cc就是gcc的意思,系统会自动推导
a.o:a.c
cc -c a.c
b.o:b.c
cc -c b.c
clean: //清除不想要的文件 *.orm -f *.o
这样的makefile 文件只要make一下就能生成最后的执行文件test
主要是maked的时候查找Makefile文件里面第一个目标文件,本例子里面是test,test就是工程管理器的最终的目标。
目标文件test的依赖的文件当做目标文件进行依赖规则的检查,这是一个递归的检查的过程,在这个例子里面依次把a.o和b.o作为目标文件来检查依赖的文件。
注:过程看上去就是从下面往上面执行,但是是因为目标文件的依赖文件是下面的目标文件,所以就先让线面的目标文件生成后,然后第一个目标文件所依赖的文件能够使用。
还有,为什么不直接依赖的是.c的文件,而是依赖的是.o的文件,这是在修改源文件后再次编译的时候,原来的.o文件就不用编译(如果时间戳没有发生变化的话)。