admin 管理员组文章数量: 1087139
2024年1月9日发(作者:微服务包括哪些技术)
关键词
关键词
define
用途
定义一个“数据包”,是用enddef做结尾,可以包含多行的命令。
ifeq/ifneq 条件判断,可以搭配else使用,endif结尾。原型:ifeq(Arg1,Arg2)。
ifdef/ifndef 变量是否定义的条件判断,可以搭配else使用,endif结尾。原型:ifdef Var。
= 变量赋值语句。如果右值包含另一个变量,则可以在后面定义这个变量。
:= 变量赋值语句。如果右值包含另一个变量,则只能引用已定义的变量。
?= 条件赋值语句。如果此变量未定义才重新赋值,如果已定义使用之前的值。
+= 为当前变量追加内容。
% 通配符
vpath 设置搜索路径,原型vpath %.x
换行符
@ 放在命令前面隐藏命令输出
- 放在命令前面忽略命令错误
: 依赖规则定义符,使用方式:目标:依赖
override 用来指示即便此变量是由make的命令行参数设置的,也使用新的赋值。因为默认情况下Makefile中对这个变量的赋值会被忽略。
.PHONY 显式声明伪目标
.SUFFIXES 声明扩展名
自动化变量
自动化变量通常用来在依赖规则的命令行中表示规则的一部分。通常依赖规则是如下定义方式:Target : Prerequisites。
$@ 表示规则中的目标文件集Target。在模式(即"%")规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。
$% 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),其值为空。
$< 依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
$? 所有同目标相比更新的依赖目标的集合。以空格分隔。
$^ 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
$+
$*
这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。
这 个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/.b",并且目标的模式是"a.%.b",那么,"$*"的值就是"dir
/"。这个变量对于构造有关联的文件名是比较有效。如果目标中没有模式的定义,那么"$*"也就不能被推导出,但是,如果目标文件的后缀是 make所识别的,那么"$*"就是除了后缀的那一部分。例如:如果目标是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值 就是"foo"。这个特性是GNUmake的,很有可能不兼容于其它版本的make,所以,我们应该尽量避免使用"$*",除非是在隐含规则或是静态模式 中。如果目标中的后缀是make所不能识别的,那么"$*"就是空值。
上面七个自动化变量可以加上D(Directory)或F(FileName)来分别表示路径和文件名部分。例如,$(@F)表示"$@"的文件部分,如 果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相当于函数"$(notdir $@)";$(@D)表示"$@"的目录部分(不以斜杠做为结尾),如果"$@"值是"dir/foo.o",那么"$(@D)"就是"dir",而如 果"$@"中没有包含斜杠的话,其值就是"."(当前目录)。
Makefile函数
按功能字符串、函数名排序:
函数原型
$(subst
$(patsubst
描述
把字串
查 找
则以
去掉
在字串
$(strip
$(findstring
$(filter <>,
$(filter-out <>,
$(sort )
$(word
$(wordlist ,
$(words
$(firstword
$(dir <>)
$(notdir <>)
$(suffix <>)
$(basename <>)
$(addsuffix
$(addprefix
$(join
以
以
给字符串中的单词排序(升序)。
取字符串
从字符串开始到和
统计
取字符串
从文件名序列
从文件名序列
从文件名序列
从文件名序列
把后缀
把前缀
把
出来的单词将被复制到
$(foreach ,,
中的单词逐一取出放到参数所指定的变量中,然后再执行
$(if part>, $(call call 函数是唯一一个可以用来 $(origin 的返回值: “undefined” $(error $(warning $(shell 如果 default” 如果 “environment” 如果 file” 如果 “command line” 如果 “override” 如果 “automatic” 如果 产生一个致命的错误, 输出一段警告信息,而make继续执行。 使用Shell执行
版权声明:本文标题:makefile符号说明 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1704785153a462117.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论