一.什么是Makefile脚本
Makefile其实就是一种脚本语言,跟python脚本一样,方便你程序的开发。当我们编译的文件过多,而又需要经常编译的时候就需要写Makefile脚本语言。或者方便别人去编译你的程序(其他人不知道如何编译),拿到你的Makefile文件后,只需要make一下,程序就编译出来了。
二.Makefile语法
Makefile包含一系列规则。如下
目标(target):依赖(prerequiries)
tab键+命令
它是如何执行的呢,当依赖文件发生改变的时候就会执行命令!这样说可能有点抽象,那么举个例子。
左边main.c文件,右边Makefile文件。
我们先make一下,看看发生什么。
make 之后就生成了main可执行文件。现在解释一下上诉的Makefile语法。目标,依赖,命令之间的关系,当依赖文件发生改变时,就会执行命令,重新生成依赖。所以我们上述脚本就是当main.c发生改变时,make一下就能重新生成main可执行文件。那么如果我再make一下会发生什么呢?
可以看到因为main.c文件没有改变,所以make一下并没有效果。你们可以去试一下改变main.c文件再去执行一下make。看看是不是重新生成了main可执行文件。
三.使用Makefile编译多个文件
我们先创建3个文件 1.c, 2.c ,3.c 和一个Makefile文件
然后编写Makefile脚本
我们先生成.o文件(目标文件),最后再进行链接成可执行文件,这样做有什么好处了,就是当一个.c文件发生改变时,其他文件只需要执行最后一步链接成main可执行文件,而不需要重新生成.o目标文件。在这个实验中区别不到,如果是比较大的项目,可能就几千上万个.c文件(比如linux内核源码),这样就大大提高了效率。
3.1 运行脚本
注意:我们这里只是测试,并没有写1.c ,2.c, 3.c 里面的内容。现在我们make一下
可以看到执行了以下语句,符合我们的预期。
3.2 利用Makefile删除不必要文件
我们只想生成main可执行文件,但是生成了很多不必要中间文件(1.o,2.o,3.o)。我们此时可以使用一个Makefile语法删除掉不需要的文件。
修改Makefile 文件
然后执行make clear,发现执行了 rm 1.o 2.o 3.o
注意:这里.PHONY:是固定的,clear:可以换成其他如XX: 最后执行make XX即可。
四.Makefile进阶语法
前面几个语法只是Make执行规则,下面提几个进阶语法,基本就能看懂别人写好的Makefile脚本了
4.1在Makefile中使用变量
如在上面实例中,1.o,2.o,2.o使用了三次,这里我们可以用变量替代,减少工作量(如调大型脚本调用多次的时候)下面是示例。
我们使用变量object(随便命名即可)来保存值,最后$(object)就能取到值。
我们make一下,发现效果一样。
4.2 Makefile中通配符
如 *.o代码当前目录下所有后缀为.o的文件.Makefile也可以修改为这样。
五.总结
本文就讲这么多了,只涉及一点基础,适合小白,如果需要深入了解Makefile,博主推荐去看《跟我一起学Makefile》这本书!!!。