Makefile的知识回顾
Make工程管理器是完全根据Makefile文件中的编译规则命令进行工作的。Makefile文件由以下三项基本内容组成:
1、 需要生成的目标文件;(target file)
2、 生成目标文件所需要的的依赖文件;(dependency file)
3、 生成目标文件的编译规则命令行;
一般形式为:
Target file : dependency file
Commend
其中,Makefile规定在书写commend命令前必须加一个键。
Make工程管理器在编译程序时会检查每个依赖文件的时间戳,一旦发现某个依赖文件的时间戳比目标文件要新,就会执行目标文件的规则命令来重新生成目标文件。这个过程称为目标文件的依赖规则检查。依赖规则检查是Make工程管理器的最核心的工作任务之一。
重点函数:
1、 warning
格式为:$(warning parameter)
功能为:“Make”运行时显示参数。
返回值:parameter。
例子: result := $(warning warning occure!)
result == warning occure!
2、 error
格式为:$(error parameter)
功能为:停止“Make”运行并显示parameter。
返回值:parameter。
例子: result := $(error error occure!)
result == error occure!
3、 dir
格式为:$(dir parameter)
功能为:从parameter中取出目录部分。
返回值:目录部分。
例子: result := $(dir /home/test/a.c)
result == /home/test/
4、 if
格式为:$(if condition_parameter , execution_parameter)
功能为:如果condition_parameter非空,运行execution_parameter部分。
返回值:condition_parameter非空,返回执行参数部分。
例子: result := $(if China , world)
result == world
5、 call
格式为:$(call variable_parameter , parameter ……)
功能为:循环把参数依次赋给variable_parameter中的$(1)、$(2)…。
返回值:赋值后的变量的值。
例子: a := $(2) $(1)
result := $(call $(a) x y)
result == yx
6、 foreach
格式为:$(foreach variable_parameter , parameter_1 , expression)
功能为:循环取出parameter_1中的单词赋给variable_parameter,然后运行expression。
返回值:expression运行的结果。
例子: a := x y z
result := $(foreach b , $(a) , $(b).c )
result == x.c y.c z.c
7、 addpreffix
格式为:$(addpreffix parameter_1 , parameter_2)
功能为:在parameter_2中的每个单词加上前缀参数1。
返回值:加上前缀的所有单词。
例子: result := $(addpreffix src/ , x.c y.c)
result == src/x.c src/y.c
8、 addsuffix
格式为:$(addsuffix parameter_1 , parameter_2)
功能为:在parameter_2中的每个单词加上后缀parameter_1。
返回值:加上后缀的所有单词。
例子: result := $(addsuffix .c , x y)
result == x.c y.c
9、 filter
格式为:$(filter model_parameter , parameter_1)
功能为:从parameter_1中筛选出符合model_parameter的字符串。
返回值:符合model_parameter的字符串。
例子: a := x.c y.c z.h
result := $(filter %.c , $(a))
result == x.c y.c
10、 findstring
格式为:$(findstring parameter_1 , parameter_2)
功能为:在parameter_2中查找parameter_1。
返回值:如果找到返回parameter_1,反之返回NULL。
例子: result := $(findstring me , you and me)
result == me
11、 strip
格式为:$(strip parameter)
功能为:去掉parameter中开头和结尾的空格。
返回值:被去掉空格的parameter。
例子: result := $(strip China )
result == China
12、 wildcard
格式为:$(wildcard model_parameter)
功能为:列出当前目录下所有符合model_parameter的文件名。
返回值:当前目录下所有符合model_parameter的文件名。
例子: result := $(wildcard *.c)
result == 当前目录下的所有的C文件名
13、 patsubst
格式为:$(patsubst model_parameter , parameter_1 , parameter_2)
功能为:将parameter_2中符合model_parameter的单词(parameter中被空格隔开的字符串)替换成parameter_1。
返回值:被替换后的parameter_2。
例子: result := $(patsubst %.c , %.o , x.c y.c)
result == x.o y.o
14、 subst
格式为:$(subst parameter_1 , parameter_2 , parameter_3)
功能为:将parameter_3中的parameter_1替换成parameter_2。
返回值:被替换后的parameter_3。
例子: result := $(subst china , the world , I love china)
result == I love the world