makefile(四)

 make的"模式"一般是至少含有一个"%"的,所以,我们可以以如下方式给所有以[.o]结尾的目标定义目标变量:

%.o :CFLAGS = -0

使用条件判断

libs_for_gcc = -lgnu

normal_libs = 


foo:$(objects)

ifeq ($(CC),gcc)

        $(CC) -o foo $(objects) $(libs_for_gcc)

else

      $(CC) -o foo $(objects) $(normal_libs)

endif

条件表达式的语法为:

<conditional-directive>;

<text-if-true>;

endif

第一个是 "ifeq"

ifeq (<arg1>;,<arg2>;)

ifeq ($(strip,$(foo)),)

第二个条件关键字是"ifneq".语法是:

ifneq (<arg1>;,<arg2>;)

第三个是"ifdef",语法是:

ifdef <variable-name>;

如果变量<variable-name>;的值非空,那到表达式为真.否在,表达式为假.当然,<variable-name>;同样可以是一个函数的返回值.注意,ifdef只是测试一个变量是否有值,其并不会把变量扩展到当前位置

第四个是 ifndef <variable-name>;

为了避免混乱,make不允许把整个条件语句分成两部分放在不同的文件中.

函数的调用语法:

函数调用,很像变量的使用,也是以"$"来标示的,其语法如下:

$(<function>;<argument>;)

或是

${<function>;<arguments>;}

这里,<function>;就是函数名,make支持的函数不多.<arguments>;是函数的参数,参数之间以逗号","分隔,而函数名和参数之间以"空格"分隔.函数调用以"$"开头,以圆括号和花括号把函数名和参数括起来.感觉好像一个变量,是不是?函数中的参数可以使用变量,为了风格的统一,函数和变量的括号最好一样,如使用"$(subst a,b,$(x))"这样的形式,而不是"$(subst a,b,${X})"的形式.因为统一会更清楚,也会减少一些不必要的麻烦.

还是来看一个示例:

comma := ,

empty :=

space := $(empty) $(empty)

foo := a b c

bar := $(subst $(space),$(comma),$(foo))

二 , 字符串处理函数

$(subst  <from>;,<to>;,<text>;)

名称:字符串替换函数--subst

功能:把字串<text>;中的<from>;字符串替换成<to>;

返回:函数返回被替换过后的字符串

$(patsubst <pattern>;,<replacement>:,<text>;)

名称:模式字符串替换函数--patsubst

功能:查找<text>;中的单词(单词以"空格","Tab"或"回车""换行"分隔)是否符合模式<pattern>;,如果匹配的话,则以<replacement>;替换.这里,<pattern>;可以包括通配符"%",表示任意长度的子串.如果<replacement>:中也包含"%",那么,<replacement>;中的这个"%"将是<pattern>;中的哪个"%"所代表的字串.(可以用"\"来转义,以"\%"来表示真实含义的"%"字符).

返回:函数返回被替换过后的字符串

示例:$(patsubst %.c,%.o,x.c.c bar.c)

如:

$(var:<pattern>;=<replacement>;)

相当于:

$(patsubst <pattern>;,<replacement>;,$(var))

而"$(var:<suffix>;=<replacement>;)"

则相当于

"$(patsubst %<suffix>;,%<replacement>;,$(var))"

例如有:objects = foo.o bar.o baz.o,

那么,"$(objects:.o=.c)"和"$(patsubst %.o,%.c,$(objects))"是一样的

$(strip<string>;)

名称:去空格函数----strip

功能:去掉<string>;字串中开头和结尾的空字符

返回:返回被去掉空格的字符串值

示例:

$(strip a b c )

把字符串"a b c "去掉开头和结尾的空格,结果是"a b c".

$(findstring <find>;,<in>;)

名称:查找字符串函数--findstring.

功能:在字串<in>;中查找<find>;字串.

返回:如果找到,那么返回<find>;,否则返回<find>;,否则返回空字符串.

你可能感兴趣的:(makefile(四))