文章目录
- make和Makefile的介绍
- make和Makefile的使用
- make和Makefile的项目测试
make和Makefile的介绍
make是一个命令
Makefile是一个文件
make和Makefile是Linux自动化构建项目的工具。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
Makefile里面维护两种关系:
1.依赖关系
2.依赖方法
举例子解释一下:
假如你是清华大学的学生,新的学期开学了,学校提醒交学费,如果不交学费就会被退学,于是你到教务处交学费,到教务处首先表明我是清华大学的,然后交上学费。
其中你是
清华大学的学生就是依赖关系,
交学费就是依赖方法。
make和Makefile的使用
首先要在路径下创建一个Makefile文件
然后在Makefile中编辑依赖关系和依赖方法。
测试:
我们可以很清楚的看到执行make自动生成可执行程序,执行make clean自动清除可执行程序
。
这时候不知道大家有没有一个问题,就是生成可执行程序我们要make,可以删除可执行要make clean为什么不能直接clean删除呢?
因为make只会自顶向下执行第一个依赖方法什么意思呢?
演示:
我们如果改了make和clean的顺序,那么接下来make会发生什么呢?
我们会发现make变成删除文件了,要创建文件的make test了。
接下来还有一个问题:
大家知不知道.PHONY是什么?
什么是伪目标呢?
伪目标:总是被执行的叫做伪目标
那么总是被执行是什么意思呢?
例子:
相信大家都已经看出区别了,make被执行过一次就不能被执行了,除非test.c做了修改。而make clean不管发生什么总之一直执行。
所以总是被执行的意思是:总会根据依赖关系,执行依赖方法。
这时候又引出一个问题,我们知道make是根据test.c有没有被修改来判断需要需要重新make,那么Makefile是如何知道可执行程序是否需要重新生成呢?
答案:根据文件最近修改时间来确定的。
我们之前学过stat,我们知道文件有三个时间:
这三个时间分别代表什么意思呢?
Access:文件最近被访问的时间
Modify:文件内容被修改时间
Change:文件属性被修改的时间
演示:
我们可以看到test.c的最后修改时间,比test早很多,所以test就已经是最新的可执行程序,那么如果我们修改一下test.c会如何呢?
我们会发现make确实又可以执行了。
make和Makefile的项目测试
我们平常用C语言写项目的时候,一般都有:
test.h:函数声明
test.c:函数实现
main.c:项目测试
那么我们如何用make和Makefile生成这个些文件的可执行程序呢?
我们如何用一个make让这个代码运行起来呢?
那么就要改进Makefile
我们可以看到make之后确实按预期生成了可执行程序和.o文件,而make clean之后也确实所有.o文件和可执行程序都被删除。