当前位置 : 主页 > 编程语言 > c++ >

Makefile功能函数

来源:互联网 收集:自由互联 发布时间:2021-06-23
foreach foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的 foreach 函数几乎是仿照于 Unix 标准 Shell(/bin/sh)中的 for 语句,或是 C-Shell(/bin/csh)中的 fore
foreach  foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的 foreach 函数几乎是仿照于 Unix 标准 Shell(/bin/sh)中的 for 语句,或是 C-Shell(/bin/csh)中的 foreach 语句而构建的。它的语法是: $(foreach <var>,<list>,<text>) 这个函数的意思是,把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text> 的所返回的每个字符串会以空格分隔, 最后当整个循环结束时, <text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。 所以, <var>最好是一个变量名, <list>可以是一个表达式, 而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。 举个例子: names := a b c d files := $(foreach n,$(names),$(n).o) 上面的例子中,$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值,这些值以空格分隔,最后作为 foreach 函数的返回,所以, $(files)的值是“a.o b.o c.o d.o”。 注意,foreach 中的<var>参数是一个临时的局部变量,foreach 函数执行完后,参数<var>的变量将不在作用,其作用域只在 foreach 函数当中。   filter $(filter <pattern...>,<text>) 名称:过滤函数——filter。 功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以有多个模式。 返回:返回符合模式<pattern>的字串。 示例: sources := foo.c bar.c baz.s ugh.h foo: $(sources) cc $(filter %.c %.s,$(sources)) -o foo $(filter %.c %.s,$(sources))返回的值是“foo.c bar.c baz.s”。   filter-out $(filter-out <pattern...>,<text>) 名称:反过滤函数——filter-out。 功能:以<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。可以有多个模式。 返回:返回不符合模式<pattern>的字串。 示例: objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o $(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”。   $(wildcard pattern) pattern定义了文件名的格式,wildcard取出其中存在的文件   patsubst $(patsubst <pattern>,<replacement>,<text>) 名称:模式字符串替换函数——patsubst。 功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。 这里,<pattern>可以包括通配符“%”, 表示任意长度的字串。 如果<replacement>中也包含“%”, 那么, <replacement> 中的这个“%”将是<pattern>中的那个“%”所代表的字串。 (可以用“\”来转义, 以“\%”来表示真实含义的“%”字符) 返回:函数返回被替换过后的字符串。 示例: $(patsubst %.c,%.o,x.c.c bar.c) 把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”
网友评论