目录
make/makefile是什么?
make/makefile是Linux项目自动化构建工具
make是一条命令
makefile是一个文件
make调用makefile,两个搭配使用,完成项目自动化构建
自动化构建
在makefile中写好我们要编译的东西,使用 make 命令,会自动执行 makefile 中的内容,减少重复写命令的实践,提高效率。
举例
接下来使用 make 命令:
分析 makefile 中的各部分
依赖关系
:前面是想要生成的文件,后面是此文件要生成所依赖的源文件
相当于写在makefile中的——(目标文件:源文件 )—— 就是依赖关系
依赖方法
依赖方法的上方是依赖关系,只有依赖关系是达不到我们得到目标文件的目的,还需要依赖方法,相当于——源文件生成目标文件的步骤——就是依赖方法
而 make 命令,可以通过依赖关系来自动调用依赖方法,make 和 makefile 工具可以提前写好命令,防止命令的错误书写,也更加方便
清理项目
上述我们是根据依赖关系和方法生成了项目,在 makefile 中也是支持清理项目:
伪目标
一般会在用 .PHONY 来修饰 clean ,而被 .PHONY 修饰的目标都称为伪目标:
伪目标表示:目标总是被执行的
这句怎么理解,有总是被执行,就有总是不被执行举例如下:
上图中目标 test 未被 .PHONY 修饰为伪目标,那么他不会一直执行:
下面我们将 test 修改为伪目标:
再次频繁调用 make:
makefile如何识别生成的目标文件的新旧?
上述提到了,不是伪目标的话,生成一次目标后,再次调用 make ,是不能再次调用依赖方法,重新生成目标的,因为我们要再次生成的目标根和已经生成的目标是完全相同的,那么makefile是如何识别新旧目标来防止重复生成的呢?
答案:makefile 会根据对比旧目标和源文件的--内容更改的时间,来确定新目标要不要生成,源文件的时间晚,则表明源文件被更改过,重新编译生成目标,若目标的时间晚,则不用重新生成。
文件有三个时间:
验证访问的时间
说明了 makefile 是不是根据访问时间来判断是否重新生成目标的
验证修改属性的时间
说明了 makefile 是不是根据属性修改时间来判断是否重新生成目标的
验证内容更改的时间
说明了 makefile 是否重新调用依赖方法生成目标,是对比目标和源文件谁记录的内容更改时间更晚,源文件更晚,则会重新生成目标!