视频:https://www.bilibili.com/video/BV1dW411n7vk?from=search&seid=13869936161616988114
可以试想一下,有一个上百个文件的代码构成的项目,如果其中只有一个或几个文件进行修改,需要从头到尾将每一个文件都重新编译是一个比较繁琐的过程。
为此,引入了Make工程管理器的概念,工程管理器指管理较多文件,自动根据文件时间自动发现更新过的文件而减少编译的工作量,同时通过读入Makefile文件来执行大量的编译工作。
makefile规则
规则:用于说明如何生成一个或多个目标文件
makefile文件里面可以有很多规则,但是第一个规则是最终生成的文件规则。
规则格式:
target: dependency_files // 目标项:依赖项
<tab>command // 必须以tab开头,command编译命令
规则就是为了生成某一个文件的。
目标项:这个就是你要生成的文件名
依赖项:要生成目标项需要的文件
编译命令:如果有依赖项生成目标项;必须以TAB开头
在mekefile中,规则的顺序是很重要的。因为,Makefile中只应该有一个最终目标,其他的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标
归结:
- 目标文件不存在,执行命令
- 文件已经更新了,执行命令
- Makefile的第一条规则为最终的目标。
例1:单文件
#include <stdio.h>
int main(int argc, int **argv)
{
printf("hello world\n");
return 0;
}
写成makefile如下
- 创建名称为makefile或者Makefile的文档
- 在文档中输入相应的内容
test:test.c gcc -o test test.c
- 运行makefile文件
命令行输入make
如果马上再执行make命令
这是因为,make命令会对比源文件的修改时间,如果早于目标文件,说明源文件没有修改,就不会帮你再次编译了。