东莞勒流网站制作wordpress 美观插件
news/
2025/9/29 1:00:04/
文章来源:
东莞勒流网站制作,wordpress 美观插件,长沙协会网站设计专业服务,seo排名赚app下载以下内容源于C语言中文网的学习与整理#xff0c;非原创#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)#xff0c;而函数调用的格式如下#xff1a; $(function arguments) 或者是…以下内容源于C语言中文网的学习与整理非原创如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)而函数调用的格式如下 $(function arguments) 或者是 ${function arguments} function 是函数名arguments 是函数的参数。参数之间要用逗号分隔开。参数和函数名之间使用空格分开。调用函数的时候要使用字符“$”后面可以跟小括号或者大括号。建议用小括号这样就可以记成无论是调用函数还是引用变量Makefile中都是用小括号Shell中都是使用花括号。但Shell中将命令的结果赋给变量时也会使用小括号比如 variable$(command)。而Shell函数见博客Shell函数_天糊土的博客-CSDN博客。 二、常用字符串处理函数
1、模式字符串替换函数patsubst 函数使用格式如下 $(patsubst pattern,replacement,text) 函数说明查找 text 中的单词是否符合模式 pattern如果匹配的话则用 replacement 替换。返回值为替换后的新字符串。 实例 OBJ$(patsubst %.c,%.o,1.c 2.c 3.c)
all:
echo $(OBJ) 执行 make 命令我们可以得到的值是 1.o 2.o 3.o这些都是替换后的值。 2、字符串替换函数subst 函数使用格式如下 $(subst from,to,text) 函数说明把字符串中的 form 替换成 to返回值为替换后的新字符串。 实例 OBJ$(subst ee,EE,feet on the street)
all:
echo $(OBJ) 执行 make 命令我们得到的值是“fEEt on the strEEt”。 3、去空格函数strip 函数使用格式如下 $(strip string) 函数说明去掉字符串的开头和结尾的字符串并且将其中的多个连续的空格合并成为一个空格。返回值为去掉空格后的字符串。 实例 OBJ$(strip a b c)
all:
echo $(OBJ) 执行完 make 之后结果是“a b c”。这个只是除去开头和结尾的空格字符并且将字符串中的空格合并成为一个空格。 4、查找字符串函数findstring 函数使用格式如下 $(findstring find,in) 函数说明查找 in 中的 find 如果查找的目标字符串存在则返回目标字符串否则返回空。 实例 OBJ$(findstring a,a b c)
all:
echo $(OBJ) 执行 make 命令得到的返回的结果就是 a。 5、过滤函数filter 函数使用格式如下 $(filter pattern,text) 函数说明过滤出 text 中符合模式 pattern 的字符串可以有多个 pattern 。返回值为过滤后的字符串。 实例 OBJ$(filter %.c %.o,1.c 2.o 3.s)
all:
echo $(OBJ) 执行 make 命令我们得到的值是“1.c 2.o”。 6、反过滤函数filter-out 函数使用格式如下 $(filter-out pattern,text) 函数说明功能和 filter 函数正好相反但是用法相同。去除符合模式 pattern 的字符串保留符合的字符串。返回值是保留的字符串。 实例 OBJ$(filter-out 1.c 2.o ,1.o 2.c 3.s)
all
echo $(OBJ) 执行 make 命令打印的结果是“3.s”。 7、排序函数sort 函数使用格式如下 $(sort list) 函数说明将 list中的单词排序升序。返回值为排列后的字符串。 实例 OBJ$(sort foo bar foo lost)
all:
echo $(OBJ) 执行 make 命令我们得到的值是“bar foo lost”。注意sort会去除重复的字符串。 8、取单词函数word 函数使用格式如下 $(word n,text) 函数说明取出函数text中的第n个单词。返回值为我们取出的第 n 个单词。 实例 OBJ$(word 2,1.c 2.c 3.c)
all:
echo $(OBJ) 执行 make 命令得到的值是“2.c”。 三、常用文件名从操作函数
在编写 Makefile 的时候很多情况下需要对文件名进行操作。例如获取文件的路径去除文件的路径取出文件前缀或后缀等等。当遇到这样的问题的时手动修改是不太可能的因为文件可能会很多而且 Makefile 中操作文件名可能不止一次。所以 Makefile 提供了相应的函数来实现文件名的操作。
注意下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待。
1、取目录函数dir 函数使用格式如下 $(dir names) 函数说明函数的功能是从文件名序列 names 中取出目录部分如果 names 中没有 / 取出的值为 ./ 。返回值为目录部分指的是最后一个反斜杠之前的部分。如果没有反斜杠将返回“./”。 实例 OBJ$(dir src/foo.c hacks)
all:
echo $(OBJ) 执行 make 命令得到的值是“src/ ./”。提取文件 foo.c 的路径是 /src 和文件 hacks 的路径 ./。 2、 取文件函数notdir 函数使用格式如下 $(notdir names) 函数说明函数的功能是从文件名序列 names 中取出非目录的部分。非目录的部分是最后一个反斜杠之后的部分。返回值为文件非目录的部分。 实例 OBJ$(notdir src/foo.c hacks)
all:
echo $(OBJ) 执行 make 命令我们可以得到的值是“foo.c hacks”。 3、取后缀名函数suffix 函数使用格式如下 $(suffix names) 函数说明从文件名序列中 names 中取出各个文件的后缀名。返回值为文件名序列 names 中的后缀序列如果文件没有后缀名则返回空字符串。 实例 OBJ$(suffix src/foo.c hacks)
all:
echo $(OBJ) 执行 make 命令得到的值是“.c ”。文件 hacks 没有后缀名所以返回的是空值。 4、取前缀函数basename 函数使用格式如下 $(basename names) 函数说明从文件名序列 names 中取出各个文件名的前缀部分。返回值为被取出来的文件的前缀名如果文件没有前缀名则返回空的字符串。 实例 OBJ$(notdir src/foo.c hacks)
all:
echo $(OBJ) 执行 make 命令得到值是“src/foo hacks”。获取的是文件的前缀名包含文件路径的部分。 5、添加后缀名函数addsuffix 函数使用格式如下 $(addsuffix suffix,names) 函数说明把后缀 suffix 加到 names 中的每个单词后面。返回值为添加上后缀的文件名序列。 实例 OBJ$(addsuffix .c,src/foo.c hacks)
all:
echo $(OBJ) 执行 make 后得到“sec/foo.c.c hack.c”。如果文件本来就存在后缀名依然会加上后缀。 6、添加前缀名函数addperfix 函数使用格式如下 $(addperfix prefix,names) 函数说明把前缀 prefix 加到 names 中的每个单词的前面。返回值为添加上前缀的文件名序列。 实例 OBJ$(addprefix src/, foo.c hacks)
all:
echo $(OBJ) 执行 make 命令后得到 src/foo.c src/hacks 。我们可以使用这个函数给文件添加路径。 7、链接函数join 函数使用格式如下 $(join list1,list2) 函数说明把 list2 中的单词对应位置地拼接到 list1 的后面。返回值为拼接好的字符串。 实例 OBJ$(join src car,abc zxc qwe)
all:
echo $(OBJ) 执行 make 命令后得到“srcabc carzxc qwe”。很显然list1中的文件名比list2的少所以多出来的保持不变。 8、获取匹配模式文件名函数wildcard 函数使用格式如下 $(wildcard PATTERN) 函数说明列出当前目录下所有符合模式的 PATTERN 格式的文件名。返回值为当前目录下的所有符合模式 PATTERN 的文件名它们以空格分隔。 实例 OBJ$(wildcard *.c *.h)
all:
echo $(OBJ) 执行 make 命令可以得到当前函数下所有的 .c 和 .h 结尾的文件。这个函数通常跟的通配符 * 连用一般使用在依赖规则的描述中。 四、常用的控制函数
Makefile 中提供了两个控制 make 运行方式的函数。当 make 执行过程中检测到某些错误时这些函数可以为用户提供消息并且可以控制 make 执行过程是否继续。
1、error函数 函数使用格式 $(error TEXT...) 函数说明产生致命错误并提示 TEXT... 信息给用户并退出 make 的执行。error函数是在函数展开时函数被调用时才提示信息并结束 make 进程因此如果函数出现在命令中或者一个递归的变量定义时读取 Makefile 时不会出现错误。而只有包含 error 函数引用的命令被执行或者定义中引用此函数的递归变量被展开时才会提示知名信息 TEXT... 同时退出 make。其返回值为空。error函数一般不出现在直接展开式的变量定义中否则在 make 读取 Makefile 时将会提示致命错误。 实例1 ERROR11234
all:ifdef ERROR1$(error error is $(ERROR1))endif make 读取解析 Makefile 时如果ERROR1已经定义make 将会提示致命错误信息 error is 1234 并保存退出。 实例2 ERR$(error found an error!)
.PHONY:err
err:;$(ERR) 在 make 读取 Makefile 时不会出现致命错误。只有err 作为目标被执行时才会出现。 2、wanning函数 函数格式如下 $(warning TEXT...) 函数说明函数 warning 类似于函数 error 区别在于它不会导致致命错误make不退出而只是提示 TEXT...make 的执行过程继续。返回值为空。用法和 error 类似展开过程相同。 五、其他常用函数
1、foreach函数 函数使用格式如下 $(foreach var,list,text) 函数说明把参数list中的单词逐一取出放到参数var所指定的变量中然后再执行text所包含的表达式。每一次text会返回一个字符串循环过程中text返回的每个字符串会以空格分割最后当整个循环结束的时候text所返回的每个字符串所组成的整个字符串以空格分隔将会是 foreach 函数的返回值。所以var最好是一个变量名list可以是一个表达式而text中一般会只用var这个参数来枚举list中的单词。 实例 name:a b c d
files:$(foreach n,$(names),$(n).o)
all:
echo $(files) 执行 make 命令我们得到的值是“a.o b.o c.o d.o”。 注意foreach 中的 var 参数是一个临时的局部变量foreach 函数执行完后参数var的变量将不再起作用其作用域只在 foreach 函数当中。 2、if函数 函数使用格式如下 $(if condition,then-part)或(ifcondition,then-part,else-part) 函数说明if函数的参数可以是两个也可以是三个。condition参数是 if 表达式如果其返回的是非空的字符串那么这个表达式就相当于返回真于是then-part就会被计算否则else-part会被计算。如果condition为真非空字符串那么then-part会是整个函数的返回值如果condition为假空字符串那么else-part将会是这个函数的返回值此时如果else-part没有被定义则函数返回空字串符。then-part和else-part只会有一个被计算。 实例 OBJ:foo.c
OBJ:$(if $(OBJ),$(OBJ),main.c)
all:
echo $(OBJ) 执行 make 命令得到 foo.c如果变量 OBJ 的值为空执行 make 命令得到 main.c。 3、call 函数 函数使用格式 $(call expression,parm1,parm2,parm3,...) 函数说明当 make 执行这个函数的时候expression参数中的变量$(1)、$(2)、$(3)等会被参数parm1parm2parm3依次取代而expression的返回值就是 call 函数的返回值。我们可以写一个非常复杂的表达式在这个表达式中我们可以定义很多的参数然后使用 call 函数来向这个表达式传递参数。 实例 1 reverse $(1) $(2)
foo $(call reverse,a,b)
all
echo $(foo) 那么foo 的值就是“a b”。当然参数的次序可以是自定义的不一定是顺序的比如 实例 2 reverse $(2) $(1)
foo $(call reverse,a,b)
all:echo $(foo) 此时的 foo 的值就是“b a”。 4、origin函数 函数使用格式 $(origin variable) 函数说明origin 函数通过返回值告知使用者这个变量是哪里来的。注意variable 是变量的名字不应该是引用所以不要在 variable 中使用“$”字符。 下面是origin函数返回值 “undefined”如果variable从来没有定义过函数将返回这个值。“default”如果variable是一个默认的定义比如说“CC”这个变量。“environment”如果variable是一个环境变量并且当Makefile被执行的时候“-e”参数没有被打开。“file”如果variable这个变量被定义在Makefile中将会返回这个值。“command line”如果variable这个变量是被命令执行的将会返回这个值。“override”如果variable是被override指示符重新定义的。“automatic”如果variable是一个命令运行中的自动化变量。这些信息对于编写 Makefile 是非常有用的。假设有一个 Makefile文件定义了一个变量bletch而环境变量中也有一个环境变量bletch。我们判断这个变量是不是环境变量如果是则将它重定义如果不是则不重新定义。于是我们在 Makefile 中可以这样写 ifdef bletch
ifeq $(origin bletch) environment
bletch barf,gag,etc
endif
endif 当然使用override关键字也可以重新定义环境中的变量但是override会把从命令行定义的变量也覆盖了而我们只想重新定义环境传来的而不是重新定义命令行传来的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921326.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!