linux笔记: Makefile基础
Makefile基础
思想
- 成百上千个源文件,按照类型,功能,模块分别放到若干个目录中,Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译
- 自动化编译,一旦写好就可以整个工程完全自动编译
使用规则
规则:
目标 …:依赖 …
tab 命令
…
目标:最终要生成的文件
依赖:生成目标所需要的文件或是目标
命令:通过执行命令对依赖操作生成目标(需添加tab缩进)
可以有多个规则,一般来说其他规则都是为了第一个规则服务的
命令在执行之前,会先检查依赖:
- 若依赖存在,直接执行命令;
- 若不存在,看之后的规则能否生成当前规则所需的依赖,若能即正常执行;若不能则报错
检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间,不做不必要的工作
- 若依赖的时间比目标的时间晚,则会重新生成目录;
- 否则不需要更新,即对应规则中的命令不执行;
- 一般来说,写的越详细,效率越高(检测更新):
但是上面的写得特别繁琐,可以用变量改进
变量:
- 自定义变量
- 预定义变量
- CC:C编译器的名称
- $@:目标的完整名称
- $<:所有的依赖文件名称
- $^:第一个依赖文件名称
- 获取变量值:$(变量名)
模式匹配:
函数:
$(wildcard PATTERN…)
功能:获取指定目录下指定类型的文件列表
实例:
$(wildcard *.c ./sub/*.c)
$(patsubst
, , ) 功能:进行字符串替换
实例:
$(patsubstr %.c ,%.o, x.c bar.c)
clean规则:
- make clean
- 伪目标:.PHONY:clean 不真实地生成clean目标文件因此一定会执行
- Post title:linux笔记: Makefile基础
- Post author:sixwalter
- Create time:2023-08-05 11:14:26
- Post link:https://coelien.github.io/2023/08/05/unix-program/linux_foundations_notes/Makefile基础/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments