foo := a.o b.o c.o
bar := $(foo:%.o=%.c)
--------------------------------------------------------
SUBDIRS = foo bar baz
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -C $@
“foo: baz”,此规则用来限制子目录的 make
顺序。它的作用是限制同步目录“foo”和“baz”的 make 过程(在处理“foo”目录
之前,需要等待“baz”目录处理完成)
--------------------------------------------------------
我们可以使用如下的模式规则来自动生成每一个.c文件对应的.d文件:
%.d: %.c
$(CC) -M $(CPPFLAGS) $< >
$@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' <
$@.$$$$ > $@; \
rm -f
$@.$$$$---------------------------------------------------------
当前目录下可以使用这样一个规则来实现对这个子目录的编译:
subsystem:
cd subdir && $(MAKE)
其等价于规则:
subsystem:
$(MAKE) -C subd
----------------------------------------------------------
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
-------------------------------------------------------------
函数的调用语法
$(FUNCTION ARGUMENTS) :"FUNCTION"是需要调用的函数名,"ARGUMENTS"是函数的参数
字符串替换函数 $(subst FROM,TO,TEXT)
模式替换函数 $(patsubst PATTERN,REPLACEMENT,TEXT)
去空格函数 $(strip STRINT)
查找字符串函数 $(findstring FIND,IN)
过滤函数 $(filter PATTERN…,TEXT)
反过滤函数 $(filter-out PATTERN...,TEXT)
排序函数 $(sort LIST)
取单词函数 $(word N,TEXT)
取字串函数 $(wordlist S,E,TEXT)
dir
notdir
suffix
basename
addsuffix
addprefix
join
wildcard 参考 8.3 文件名处理函数 一节
error 参考 8.11 make的控制函数
warning 参考 8.11 make的控制函数
shell 参考 8.10 shell函数 一节
origin 参考 8.9 origin函数 一节
foreach 参考 8.4 foreach函数 一节
call 参考 8.6 call函数 一节
if 参考 8.5 if函数 一节
eval 参考 8.8 eval函数 一节
value 参考 8.7 value函数 一节
.
.
.
files := $(shell echo *.c) 将变量“files”赋值为当前目录下所有.c文件的列表(文件名之间使用空格分割
-------------------------------------------------------------
重建内嵌隐含规则
%.o : %.c
$(CC) $(CFLAGS) –D__DEBUG__ $< -o $@
-------------------------------------------------------------
MAKEFILES 参考 3.4 变量 MAKEFILES 一节
MAKEFILES_LIST 参考 3.5 变量 MAKEFILE_LIST 一节
VPATH 参考 4.5.1 一般搜索 一小节
SHELL 参考 5.2 命令的执行 一节
MAKESHELL 参考 5.2 命令的执行 一节
MAKE 参考 5.6 make的递归执行 一节
MAKELEVEL 参考 5.6 make的递归执行 一节
MAKEFLAGS 参考 5.6 make的递归执行 一节
MAKECMDGOALS 参考 9.2 指定终极目标 一节
CURDIR 参考 5.6 make的递归执行 一节
SUFFIXES 参考 10.8 隐含规则的搜索算法 一节
.LIBPATTERNS 参考 4.5.6 库文件和搜索目录 一小节