一、什么是make和makefile
make是一条指令
Makefile是当前目录下的一个文件
二、makefile文件编写
依赖关系::前为要目标文件,后为其依赖的文件
依赖方法:用依赖文件生成目标文件的具体指令
简便写法:
$@:表示目标文件
$^:表示依赖文件
三、如何形成目标文件?
先将编译链接拆开成4个依赖
make后生成对应的.i .s .o的临时文件/中间文件
编译生成与写的顺序无关,扫描makefile文件时,会根据依赖关系先找到所需要的依赖文件,找到后返回原处继续执行。
make会自动推导 makefile中的所需的依赖文件
递归进行,栈式结构。
四、如何清理文件?
make后面不指定,默认执行第一条依赖关系和依赖方法
make clean指定了生成clean的依赖关系,就会执行相应的rm的依赖方法
用.PHONY修饰clean,使得总是可以clean
五、怎么判断make为最新版本?
源文件没有更新,make就没必要再一次编译。代码量较大时,比较耗时,这样可以提高编译效率
实现原理是什么? .c .exe的更新时间不同
如何证明?
stat指令,查看3个时间(ACM时间)
文件 = 文件内容 + 文件属性
Modify:修改文件内容
Change:修改文件属性
Modify时,一般也会伴随Change和Access(具体情况具体分析)
修改内容,3个时间都改变。有时
chmod改变属性,只改变Change。为什么不改变Access?
Access访问就会修改,访问过于频繁。文件存在磁盘上,访问外设,频繁访问影响速度。
现在有的OS引入计数器,即多次access才会改变一次对应的时间
可以用touch指令手动更新时间
touch-->不存在就创建,存在就更新时间
.c .exe对比的是Modify时间。
如果此时不能make,touch一下更新时间就可以make。
用.PHONY修饰即可跳过时间对比,总是被执行。