文章目录
- make是一个命令
- makefile or Makefile是一个当前目录下的文件
- 使用:
- 生成可执行文件
- 清理
- 作用
- 依赖关系
- 依赖方法
- make会自动推导makefile中的依赖关系栈式结构
- 为什么清理的时候要make 加上clean?
- make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖方法
- 为什么make了一次之后就不能继续make了?怎么做到的?
- 结论
- 新指令 stat + 文件名
- touch + 文件名
- 回顾文件
- 小细节
make是一个命令
makefile or Makefile是一个当前目录下的文件
makefile
mytest.exe:code.c
2 gcc -o mytest.exe code.c
3 .PHONY:clean
4 clean:
5 rm -f mytest.exe
使用:
生成可执行文件
清理
作用
当有多个源文件时,使用make和makefile来帮助我们进行自动化编译,也就是用一个make和make c lean帮助程序员从繁琐的gcc或者g++的命令中解脱
依赖关系
举个例子:你给你爸爸打电话要钱,你是你爸爸的儿子,你依赖于你爸爸,这就是类似的依赖关系
依赖方法
你找你爸爸的目的是啥? 要钱
则mytest.exe依赖code.c生成,要gcc生成对应的可执行程序
make会自动推导makefile中的依赖关系栈式结构
故意再makefile文件中将gcc 生成i s o 文件过程都写出来
要形成mecode就需要mycode.o
要形成.o文件需要.s
要形成.s文件需要.i
要形成.i文件需要.c
我们目录里只有.c,那么这种向下递归寻找到.c,.c就是递归出口,再返回到上面生成中间文件
所以makefile中最终要生成的mycode会根据它所依赖的文件依次的去后面寻找后面的内容
即使是makefile顺序乱序也可以,不影响
实际开发不需要这么复杂。
为什么清理的时候要make 加上clean?
clean不依赖于任何
他的依赖方法就是清理 rm
如果把clean放到makefile的最开头,那么 make 会自顶向下对makefile进行扫描,把所要形成的第一个目标文件,充当为make的默认动作,谁在前面,直接make就是默认动作
make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖方法
make clean or make mycode
为什么make了一次之后就不能继续make了?怎么做到的?
现象
结论
一般比较文件的modify时间看是否新于可执行文件的modify时间,判断是否make生成
make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!
不一定总是执行的!
我要想让依赖关系总是被执行呢??
.PHONY:伪目标
但是不建议让生成可执行文件总是被执行
建议把clean加上总是被执行
clean不一定只做删除rm操作,可能会做其他清理操作,其他的操作不一定总是执行
新指令 stat + 文件名
查看一个文件的access , modify , change的三个时间
access:最近一次 文件被访问的时间 (cat vim 增删改)频率最高但实验不这样
modify:最近修改文件内容的时间
change:最近修改文件属性的时间
如果修改了文件内容,文件属性也需要更改(文件大小),而打开此文件,access也修改
但实际上access在理论上修改频率应该是最高的
但是文件存在磁盘上,多次访问必定造成效率下降
则access更新策略改为 ,计数器,访问5次会更改,或者modify几次和change几次会更改
touch + 文件名
touch一个存在的文件 ,强制更新文件的三个ACM时间
touch -m //改modify
touch -a //改access
回顾文件
文件属性 去 Linux-权限回顾