符号说明
\: 换行符
@: 放在命令前面隐藏命令输出
-: 放在命令前面忽略命令错误
:: 依赖规则定义符号,即目标:依赖
.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命令
\: 换行符
@: 放在命令前面隐藏命令输出
-: 放在命令前面忽略命令错误
:: 依赖规则定义符号,即目标:依赖
.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命令