make 规则:
当依赖比目标"新"时执行命令.
target: prerequisite
<TAB>command
1. 多目标:
file1.o file2.o : source1.c source2.c source3.c
<TAB>command
2. 伪目标:
.PHONY: help
help:
<TAB>command
3. 模式规则:
%: make中使用的通配符号, 代表柄(stem).
例如, 想使用add.c sub.c生成add.o和sub.o, 即可使用此规则
%.o : %.c
<TAB>command
4. 限制的模式规则:
和模式规则一样, 但是目标只有a.o和b.o
a.o b.o : %.o : %.c
<TAB>command
变量定义:
--------------------------------
延后赋值: 变量被引用时才求值
var = str
立即赋值
var := str
追加赋值: 给变量追加值, 如果变量原来是立即赋值的,
则追加也是立即的; 否则为延后追加赋值.
var += str
条件赋值: 变量没有定义则使用该赋值.
var ?= str
变量引用:
--------------------------------
使用$(var)形式或者${var}形式引用变量. makefile中一般
只使用$(var)形式.
注意: shell脚本只使用${var}形式引用变量, shell脚本中
$(command)表示命令替换, 即执行command命令并可将命令输出
赋值给某shell变量.
makefile是make解析的, 和shell脚本是两回事.
一个 := 与 = 区别的例子:
--------------------------------
CC := gcc
CFLAGS := -g
CCOMP = $(CC) $(CFLAGS)
$(info Compiler is $(CCOMP))
CC := arm-linux-gcc
$(info Compiler is $(CCOMP))
内置变量:
--------------------------------
$@ 规则目标
$< 规则依赖中第一个预备文件
$^ 规则依赖中所有预备文件的完整清单
$(@D) 规则目标文件的所在目录
$(@F) 规则目标文件的文件名
变量高级用法:
--------------------------------
foo := a.o b.o c.o
var := $(foo:.o=.c)
替换后变量var的值是 a.c b.c c.c