如果想构建大工程项目,Makefile是不可或缺的。因为文件编译等工作我们手动来处理,费时费力,我们需要写Makefile来自动化处理
make是一条指令,Makefile是一个文件,它们两者搭配使用就可以实现自动化构建
Makefile大体结构就是依赖关系和依赖方法的组合,通俗理解,依赖关系是告诉机器起始和目标,依赖方法是告诉机器用什么指令可以完成上述依赖关系


上图就是Makefile的一个示例,可以实现test.c文件编译为可执行文件test
编写完Makefile文件后我们在命令行用make test或者只写make(只写make会自动执行第一条线------test-test.o- test.s-test.i)

我们可以用指令make clean清除可执行文件,依赖关系如果目标不需要依赖,可以不写冒号后面。而.PHONY我们一会再介绍
上述只是示例,我们一般不是这样用的

上幅图只是过渡,不够泛型

上述是Makefile的特殊语法,可以使Makefile更灵活一些
当我们已经有可执行文件test时,我们再次make,Linux会出现这样的字样

这是因为语法的制定者为了提高效率做出的考量,如果我们的源文件test.c没有更新就不需要再次编译------也就是说,编译器会比较test.c和test的最后修改时间,如果前者小于后者就不会再次编译了,而.PHONY会让make忽略源文件和可执行目标文件的修改时间对比
因此引出一个问题,修改时间是什么

Modify是修改时间(取决于文件内容是否被修改)
Change是状态改变时间(取决于文件属性是否被修改),但是文件内容一旦被修改Modify就会被修改,Change一定被修改
Access是访问时间,由于访问文件会很频繁,一访问就修改效率会很低,因此有访问文件不会每次都修改访问时间,可能是隔几次(取决于系统)