Linux项目自动化构建工具-make/Makefile

一、什么是make和makefile

make是一条指令

Makefile是当前目录下的一个文件

二、makefile文件编写

Linux项目自动化构建工具-make/Makefile_第1张图片

依赖关系::前为要目标文件,后为其依赖的文件

依赖方法:用依赖文件生成目标文件的具体指令

Linux项目自动化构建工具-make/Makefile_第2张图片

简便写法:

Linux项目自动化构建工具-make/Makefile_第3张图片

$@:表示目标文件

$^:表示依赖文件

三、如何形成目标文件?

先将编译链接拆开成4个依赖

Linux项目自动化构建工具-make/Makefile_第4张图片

Linux项目自动化构建工具-make/Makefile_第5张图片

make后生成对应的.i .s .o的临时文件/中间文件

编译生成与写的顺序无关,扫描makefile文件时,会根据依赖关系先找到所需要的依赖文件,找到后返回原处继续执行。

make会自动推导 makefile中的所需的依赖文件

递归进行,栈式结构。

四、如何清理文件?

make后面不指定,默认执行第一条依赖关系和依赖方法

make clean指定了生成clean的依赖关系,就会执行相应的rm的依赖方法

用.PHONY修饰clean,使得总是可以clean

五、怎么判断make为最新版本?

源文件没有更新,make就没必要再一次编译。代码量较大时,比较耗时,这样可以提高编译效率

Linux项目自动化构建工具-make/Makefile_第6张图片

实现原理是什么? .c  .exe的更新时间不同

Linux项目自动化构建工具-make/Makefile_第7张图片

如何证明?

stat指令,查看3个时间(ACM时间)

Linux项目自动化构建工具-make/Makefile_第8张图片

文件 = 文件内容 + 文件属性

Modify:修改文件内容

Change:修改文件属性

Modify时,一般也会伴随Change和Access(具体情况具体分析)

Linux项目自动化构建工具-make/Makefile_第9张图片

修改内容,3个时间都改变。有时

Linux项目自动化构建工具-make/Makefile_第10张图片

chmod改变属性,只改变Change。为什么不改变Access?

Access访问就会修改,访问过于频繁。文件存在磁盘上,访问外设,频繁访问影响速度。

Linux项目自动化构建工具-make/Makefile_第11张图片

可以用touch指令手动更新时间

.c .exe对比的是Modify时间。

如果此时不能make,touch一下更新时间就可以make。

Linux项目自动化构建工具-make/Makefile_第12张图片

用.PHONY修饰即可跳过时间对比,总是被执行。

Linux项目自动化构建工具-make/Makefile_第13张图片

你可能感兴趣的:(Linux,is,not,unix,--,系统,linux,自动化,运维)