文档详情

(makefile函数调用linux.doc

发布:2017-01-21约1.11万字共10页下载文档
文本预览下载声明
makefile(函数调用)_linux 文本转换函数 函数允许您在makefile文件中处理文本、计算文件、操作使用命令等。在函数调用时您必须指定函数名以及函数操作使用的参数。函数处理的结果将返回到makefile文件中的调用点,其方式和变量替换一样。 8.1函数调用语法 函数调用和变量引用类似,它的格式如下: $(function arguments) 或这样: ${function arguments} 这里‘function’是函数名,是make内建函数列表中的一个。当然您也可以使用创建函数call创建的您自己的函数。‘arguments’是该函数的参数。参数和函数名之间是用空格或Tab隔开,如果有多个参数,它们之间用逗号隔开。这些空格和逗号不是参数值的一部分。包围函数调用的定界符,无论圆括号或大括号,可以在参数中成对出现,在一个函数调用中只能有一种定界符。如果在参数中包含变量引用或其它的函数调用,最好使用同一种定界符,如写为‘$(subst a,b,$(x)), 而不是 `$(subst a,b,${x})。这是因为这种方式不但比较清楚,而且也有在一个函数调用中只能有一种定界符的规定。 为每一个参数写的文本经过变量替换或函数调用处理,最终得到参数的值,这些值是函数执行必须依靠的文本。另外,变量替换是按照变量在参数中出现的次序进行处理的。 逗号和不成对出现的圆括号、大括号不能作为文本出现在参数中,前导空格也不能出现在第一个参数中。这些字符不能被变量替换处理为参数的值。如果需要使用这些字符,首先定义变量comma和space,它们的值是单独的逗号和空格字符,然后在需要的地方因用它们,如下例: comma:= , empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo)) # bar is now `a,b,c. 这里函数subst的功能是将变量foo中的空格用逗号替换,然后返回结果。 8.2字符串替换和分析函数 这里有一些用于操作字符串的函数: $(subst?from,to,text) 在文本‘text’中使用‘to’替换每一处‘from’。例如: $(subst ee,EE,feet on the street) 结果为‘fEEt on the street’。 $(patsubst?pattern,replacement,text) 寻找‘text’中符合格式‘pattern’的字,用‘replacement’替换它们。这里‘pattern’中包含通配符‘%’,它和一个字中任意个数的字符相匹配。如果‘replacement’中也含有通配符‘%’,则这个‘%’被和‘pattern’中通配符‘%’匹配的文本代替。在函数patsubst中的‘%’可以用反斜杠(‘\’)引用。引用字符‘%’的反斜杠可以被更多反斜杠引用。引用字符‘%’和其它反斜杠的反斜杠在比较文件名或有一个stem(径)代替它之前从格式中移出。使用反斜杠引用字符‘%’不会带来其它麻烦。例如,格式‘the\%weird\\%pattern\\是‘the%weird\ 加上通配符‘%然后和字符串‘pattern\\连接。最后的两个反斜杠由于不能影响任何统配符‘%’所以保持不变。在字之间的空格间被压缩为单个空格,前导以及结尾空格被丢弃。例如: $(patsubst %.c,%.o,x.c.c bar.c) 的结果为:‘x.c.o bar.o。替换引用是实现函数patsubst功能一个简单方法: $(var:pattern=replacement) 等同于 : $(patsubst pattern,replacement,$(var)) 另一个通常使用的函数patsubst的简单方法是:替换文件名的后缀。 $(var:suffix=replacement) 等同于: $(patsubst %suffix,%replacement,$(var)) 例如您可能有一个OBJ文件的列表: objects = foo.o bar.o baz.o 要得到这些文件的源文件,您可以简单的写为: $(objects:.o=.c) 代替规范的格式: $(patsubst %.o,%.c,$(objects)) $(strip?string) 去掉前导和结尾空格,并将中间的多个空格压缩为单个空格。这样,‘$(strip a b c )结果为‘a b c’。函数strip和条件语句连用非常有用。当使用ifeq或ifneq把一些值和空字符串‘’比较时,您通常要将一些仅由空格组成的字符串认为是空字符串(参阅makefile中的条件语句)。如此下面的例子在实现预期结果时可能失败: .P
显示全部
相似文档