makefile之二:符号、函数说明

来源:互联网 发布:手机网络制式有几种 编辑:程序博客网 时间:2024/06/04 23:21
符号说明
\:    换行符
@:    放在命令前面隐藏命令输出
-:    放在命令前面忽略命令错误
::    依赖规则定义符号,即目标:依赖
.PHONY:    显式声明伪目标
$@:    表示一个规则中的目标文件名。如果目标是一个文档文件,Linux中,一般称.a文件为文档文件,也称静态库文件。那么它代表这个文件名。
$%:当目标是一个静态库文件时,$%代表静态库的一个成员名。例如:某条规则的目标是"foo.a(bar.o)"那么,“$%”的值就为"bar.o",而"$@"的值为“foo.a”.如果目标不是静态库文件,$%的值为空。
$<:    规则中的第一个依赖文件名。但如果规则中使用了隐含规则,那么它的值是由隐含规则引入的第一个依赖文件名.
$>:它和$%一样也只适用于库文件,它的值是库名,见$%;它的值是库名即foo.a.
$?:    所有同目标相比更新的依赖目标的集合。以空格间隔。如果目标是静态库文件名,代表的是库成员(.o文件)
$^:    所有的依赖目标的集合。以空格间隔,且会去重。如果目标是静态库文件,它所代表的只是所有库成员(.o文件)名
$+:    和$^作用相似,但不会去重。主要用在程序外国链接时库的交叉引用场合。
$*:    表示目标文件中去掉后缀后的名称。例如,如果某个规则的目标文件是module1.o,则$*的值是去掉后缀后的名称即module1.
D/F:    表示路径和文件名部分。$(@F):表示$@的文件部分
“=”,当它的右边赋值是变量时,这个变量的定义在本条语句之前或之后都可以
“:=”:的意思是,它右边赋得值如果是变量,只能使用在这条语句之前定义好的,而不能使用本条语句之后定义的变量
“?=”:是指,该符号左边的变量,如果在本条语句之前没有定义过,则执行本语句,如果已经定义,那么本语句什么都不做

函数说明
$(subst <from>, <to>, <text>)::    把text中的from替换为to
$(patsubst <pattern>,<replacement>,<text>):    模式替换
$(strip <string>):    去掉string字串中开头和结尾的空字符
$(findstring <find>,<in>):    在in中找find字串
$(filter <pattern>,<text>):    过滤text,并保留符合pattern模式的字符串
$(filter-out <pattern>,<text>):    和filter相反
$(sort <list>):    给字串list中的单词升序排序
$(word <n>,<text>):    取字串\<text>中第n个单词
$(wordlist <s>,<e>,<text>):    从text中取从开始到的字符串。s和e是数字
$(words <text>):    统计text的单词个数
$(firstword <text>):    取text的第一个单词
$(dir <names>):    从文件名names中取出目录部分
$(notdir <names>):    从文件名names种取出非目录部分
$(suffix <names>):    取出文件名后缀
$(basename <names>):    取出文件名部分
$(addsuffix <suffix>,<names>):    把后缀suffix加到names中每个单词后面
$(addprefix <prefix>,<names>):    把前缀prefix加到names每个单词前面
$(join <list1>,<list2>):    把list1加到list2后面
$(foreach <var>,<list>,<text>):    把list里的单词一一取出,放到var中,然后执行text所包含的表达式,表达式会返回一个字符串。多个字符串用空格间隔。foreach会返回这样一个字符串列表。
$(if <condition>,<then-part>):    if语句
$(call <expression>,<parm1>,<parm2>,<parm3>):    调用表达式,表达式中的$(1),$(2),$(3)会替换为三个参数。
$(origin <variable>):    origin会告诉我们这个变量是哪里来的。
$(error <text>):    产生一个致命错误,text是错误信息,退出
$(waring <text>):    输出一个警告信息,而make继续执行
$(shell <command>):    使用shell执行command命令

0 0
原创粉丝点击