Makefile的核心﹣-﹣规则:
目标:依赖1 依赖2...
[TAB]命令
当"目标文件不存在,或某个依赖文件比目标文件"新",
则:执行"命令"
通配符
在Makefile中表示一个文件名时,可以使用通配符。在Makefile中可以使用的通配符有:* 、? 、 […]。通配符的使用方法和含义和在shell中一样。比如:*.c 表示当前目录下所有以“.c”结尾的文件。除此之外,Makefile还有经常使用的几个自动变量也可以看做特殊通配符:
- $@:所有目标文件
- $^:目标依赖的所有文件
- $<:第一个依赖文件
- $?:所有更新过的依赖文件目标的
假想目标
.PHONY: 目标
使用了假想目标的目标之后不会去寻找目标文件是否存在
即时变量、延时变量,export
简单变量(即时变量):
A := XXX # A的值即刻确定,在定义时即确定
B = XXX # B的值使用到时才确定
:= # 即时变量
= # 延时变量
?= # 延时变量,如果是第1次定义才起效,如果在前面该变量已定义则忽略这句
+=#附加,它是即时变量还是延时变量取决于前面的定义
Makefile函数
a. $(foreach var,list, text) # 将list的中的变量,改为text表达式的模样
b. $(filter pattern...,text) # 在text中取出符合patten格式的值
$(filter-out pattern...,text) # 在text中取出不符合patten格式的值
c. $(wildcard pattern) # pattern定义了文件名的格式,
#wildcard取出其中存在的文件
$(patsubst pattern,replacement,$(var)) #从列表中取出每一个值
#如果符合pattern
#则替换为replacement
简单来说:
foreach:只能统一对所有对象做统一的修改
filter:查找到显示出来所有符合条件的对象
wildcard:找出存在符合条件格式的文件
patsubst:能查找替换
使用make命令
make [目标]
若无目标,默认第一个目标