makefile的三要素:
目标:要生成的目标文件
依赖:目标文件由哪些文件生成
命令:通过执行命令由依赖文件生成目标
规则:
目标:依赖
<Tab> 命令
执行make指令,默认是生成第一个目标
原理 :
1. 当依赖文件不存在,如果有的依赖文件不存在,则向下搜索规则,看是否有生成该依赖文件的规则,
如果有规则用来生成该依赖文件,则执行规则中的命令生成依赖文件;如果没有规则用来生成该依赖文件,则报错。
2. 当依赖文件存在,如果所有的依赖文件都存在,则检查规则中依赖文件是否比目标新,如果任一依赖文件都比目标文件新,则目标必须更新。
变量:
1. 普通变量:用户自定义的变量,要见名知义
makefile中变量一般有三种赋值,“=”赋值表示变量的值是整个makefile中最后被指定的值。
OBJ_A = A
OBJ_B = $(OBJ_A) B
OBJ_A = AA
all:
@echo $(OBJ_B)//输出AA B,不是A B,在执行make指令时,会把整个makefile展开,来决定变量的值
“:=”表示直接赋值,赋予当前位置的值
OBJ_A := A
OBJ_B := $(OBJ_A) B
OBJ_A := AA
all:
@echo $(OBJ_B)//输出A B,即根据当前位置进行赋值,“:=”才是真正意义上的直接赋值
“?=”表示如果该变量没有被赋值,赋予等号后面的值
VAR := B
VAR ?= A
all:
@echo $(VAR)//输出B
2.
标签:文件,依赖,OBJ,makefile,生成,赋值 From: https://www.cnblogs.com/zj-studyrecoding/p/18037029