Makefile初步理解

来源:互联网 发布:下载切换mp3软件 编辑:程序博客网 时间:2024/06/05 12:43

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:             //清除不想要的文件 *.o

rm -f *.o

这样的makefile 文件只要make一下就能生成最后的执行文件test

主要是maked的时候查找Makefile文件里面第一个目标文件,本例子里面是testtest就是工程管理器的最终的目标。

目标文件test的依赖的文件当做目标文件进行依赖规则的检查,这是一个递归的检查的过程,在这个例子里面依次把a.ob.o作为目标文件来检查依赖的文件。

注:过程看上去就是从下面往上面执行,但是是因为目标文件的依赖文件是下面的目标文件,所以就先让线面的目标文件生成后,然后第一个目标文件所依赖的文件能够使用。

还有,为什么不直接依赖的是.c的文件,而是依赖的是.o的文件,这是在修改源文件后再次编译的时候,原来的.o文件就不用编译(如果时间戳没有发生变化的话)。







原创粉丝点击