网站引流怎么做的,广州网站推广模板,农业特色网站建设,网站服务器在那里找1.Makefile函数
GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。通过这些函数#xff0c;用户可以节省很多精力#xff0c;编写出更加灵活和健壮的Makefile。函数的使用和变量引用的展开方式相同#xff1a;
$(function arguments)${function arguments}关于…1.Makefile函数
GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。通过这些函数用户可以节省很多精力编写出更加灵活和健壮的Makefile。函数的使用和变量引用的展开方式相同
$(function arguments)${function arguments}关于函数的使用格式有以下需要注意的地方
函数主要分为两类make内嵌函数和用户自定义函数。对于 GNU make内嵌的函数直接引用就可以了对于用户自定义的函数要通过make的call函数来间接调用。函数和参数列表之间要用空格隔开多个参数之间使用逗号隔开。如果在参数中引用了变量变量的引用建议和函数引用使用统一格式要么是一对小括号要么是一对大括号。
函数使用示例如果我们想要获取某个目录下所有的C文件列表可以使用扩展通配符函数wildcard
SRC $(wildcard *.c)HEAD $(wildcard *.h)all: echo SRC $(SRC) echo HEAD $(HEAD)在当前目录下我们新建一些C文件和H文件然后使用make命令
# lsadd.c add.h hello.c main.c makefile sub.c sub.h# makeSRC hello.c main.c add.c sub.cHEAD add.h sub.h1.1用户自定义函数
GNU make提供了大量的内嵌函数大大方便了用户Makefile的编写。但有时候根据需要用户也可以自定义一些函数然后在Makefile中引用它们
PHONY: alldefine func echo pram1 $(0) echo pram2 $(1)endefall: $(call func, hello zhaixue.cc)用户自定义函以define开头endef结束给函数传递的参数在函数中使用$(0)、$(1)引用分别表示第1个参数、第2个参数…对于用户自定义函数在Makefile中要使用call函数间接调用各个参数之间使用空格隔开 # makepram1 funcpram2 hello zhaixue.cc
2.Makefile文本处理函数
GNU make提供了一系列文本处理函数subst、patsubst、strip、findstring、filter、filer-out、sort、word、wordlist、words、fistword。接下来我们一一讲解
2.1subst函数
subst函数用来实现字符串的替换将字符串text中的old替换为new
$(subst old,new,text)编写一个Makefile将当前目录下的所有c文件的名称xx.c转换为xx.o
.PHONY: allSRC $(wildcard *.c)OBJ $(subst .c,.o,$(SRC))all: echo OBJ $(OBJ) echo $(subst banana, apple, banana is good, I like banana)执行make命令可以看到执行结果字符串中的banana替换成了appleSRC变量中的所有.c 替换成了 .o
# lsadd.c add.h hello.c main.c makefile sub.c sub.h# makeOBJ hello.o main.o add.o sub.o apple is good, I like apple2.2patsubst函数
patsubst函数主要用来模式替换使用通配符 % 代表一个单词中的若干字符在PATTERN和REPLACEMENT如果都包含这个通配符表示两者表示的是相同的若干个字符并执行替换操作。
$(patsubst PATTERN, REPLACEMENT, TEXT)如果我们想把某个目录下的所有.c文件皆为的文件名转换为以.o皆为的目标文件名相比subst使用patsubst会更加方便
.PHONY: allSRC $(wildcard *.c)OBJ $(patsubst %.c, %.o, $(SRC))all: echo OBJ $(OBJ)SRC变量中包括多个字符串代表各个文件名各个字符串之间使用空格隔开使用OBJ变量保存转换后的字符串。在当前目录下直接执行make可以看到运行结果
# lsadd.c add.h hello.c main.c makefile sub.c sub.h# makeOBJ hello.o main.o add.o sub.o在Makefile中如果我们已经得到了需要编译的C文件想要得到它们对应的目标文件经常使用上面的patsubst函数进行转换。
2.3strip函数
strip函数是一个去空格函数一个字符串通常有多个单词单词之间使用一个或多个空格进行分割strip函数用来将多个连续的空字符合并成一个并去掉字符串开头、末尾的空字符。空字符包括空格、多个空格、tab等不可显示的字符。
.PHONY: allSTR hello a b cSTRIP_STR $(strip $(STR))all: echo STR $(STR) echo STRIP_STR $(STRIP_STR)执行make后的结果
# makeSTR hello a b cSTRIP_STR hello a b cstrip函数经常用在条件判断语句的表达式中去掉多余的空格等因素确保表达式比较的可靠和健壮。
ifeq ($(strip $(foo)),) echo foo is emptyendif2.4findstring 函数
findstring函数用来查找一个字符串。使用格式如下
$(findstring FIND, IN)findstring函数会在字符串IN中查找“FIND”字符串如果找到则返回字符串FIND否则返回空。
.PHONY: allSTR hello a b cFIND $(findstring hello, $(STR))all: echo STR $(STR) echo FIND $(FIND)执行make运行结果为
# makeSTR hello a b cFIND hello2.5filter 函数
filter函数用来过滤掉一个指定的字符串使用格式如下
$(filter PATTERN…,TEXT)filter函数用来过滤掉字符串TEXT中所有不符合PATTERN模式的单词只留下符合PATTERN格式的单词。
.PHONY: allFILE a.c b.h c.s d.cppSRC $(filter %.c, $(FILE))all: echo FILE $(FILE) echo SRC $(SRC)执行make运行结果为
# makeFILE a.c b.h c.s d.cppSRC a.c2.6filter-out 函数
filer-out函数是一个反过滤函数功能和filter函数恰恰相反该函数会过滤掉所有符合PATTERN模式的单词保留所有不符合此模式的单词。
.PHONY: allFILE a.c b.h c.s d.cppSRC $(filter-out %.c, $(FILE))all: echo FILE $(FILE) echo SRC $(SRC)在上面的Makefile中使用filter-out %.c 过滤掉所有的.c文件。执行make运行结果为
# makeFILE a.c b.h c.s d.cppSRC b.h c.s d.cpp 2.7sort函数单词排序
$(sort LIST)sort函数对字符串LIST中的单词以首字母为准进行排序并删除重复的单词。
.PHONY: allFILE a.c b.h c.s d.cppSRC $(filter-out %.c, $(FILE))all: echo FILE $(FILE) echo SRC $(SRC)执行make运行结果为
# makeLIST banana pear apple peach apple orangeSTR apple banana orange peach pear2.8word函数取单词
word函数的作用是从一个字符串TEXT中按照指定的数目N取单词 $(word N,TEXT)函数的返回值是字符串TEXT中的第N个单词。如果N的值大于字符串中单词的个数返回空如果N为0则出错。
.PHONY: allLIST banana pear apple peach orangeword1 $(word 1, $(LIST))word2 $(word 2, $(LIST))word3 $(word 3, $(LIST))word4 $(word 4, $(LIST))word5 $(word 5, $(LIST))word6 $(word 6, $(LIST))all: echo word1 $(word1) echo word2 $(word2) echo word3 $(word3) echo word4 $(word4) echo word5 $(word5) echo word6 $(word6)执行make运行结果为
# makeword1 bananaword2 pearword3 appleword4 peachword5 orangeword6 如果N的值为0Makefile含有下面的语句
word0 $(word 0, $(LIST))则会报错
makefile:9: *** first argument to word function must be greater than 0. Stop.2.9wordlist函数取字串
wordlist函数用来从一个字符串TEXT中取出从N到M之间的一个单词串
$(wordlist N, M, TEXT)N 和 M都是从1开始的一个数字函数的返回值是字符串TEXT中从N到M的一个单词串。当N比字符串TEXT中的单词个数大时函数返回空。
.PHONY: allLIST banana pear apple peach orangesub_list $(wordlist 1, 3, $(LIST))all: echo LIST $(LIST) echo sub_list $(sub_list)执行make时wordlist函数会将字符串LIST中的前三个单词赋值给sub_list
# makeLIST banana pear apple peach orangesub_list banana pear apple2.10words函数统计单词数目
words函数用来统计一个字符串TEXT中单词的个数
$(words TEXT)words函数的返回值为字符串TEXT中单词的个数。
.PHONY: allLIST banana pear apple peach orangeall: echo LIST $(LIST) echo LIST len $(words $(LIST))执行make运行结果为
# makeLIST banana pear apple peach orangeLIST len 52.11firstword函数取首个单词
firstword函数用来取一个字符串中的首个单词。
$(firstword NAMES…)$(word 1,TEXT)firstword函数其实就相当于$(word 1,TEXT)
.PHONY: allLIST banana pear apple peach orangeall: echo LIST $(LIST) echo first word $(firstword $(LIST))执行make运行结果为 # makeLIST banana pear apple peach orangefirst word banana