Makefile中if函数和ifeq/ifneq语句

注意:Makefile中没有if语句,只有 ifeq ifneq语句

8.5 if 函数
函数“ if”提供了一个在函数上下文中实现条件判断的功能。就像make所支持的条
件语句— ifeq(参考 7.2.1.1 关键字“ ifeq” 一小节)一样。
¾ 函数语法:
$(if CONDITION,THEN-PART[,ELSE-PART])
¾ 函数功能: 第一个参数“ CONDITION”,在函数执行时忽略其前导和结尾空字
2004年9月11日 120
GNU make中文手册
符,如果包含对其他变量或者函数的引用则进行展开。如果“ CONDITION”的
展开结果非空,则条件为真,就将第二个参数“ THEN_PATR”作为函数的计算
表达式;“ CONDITION”的展开结果为空,将第三个参数“ ELSE-PART”作为
函数的表达式,函数的返回结果为有效表达式的计算结果。
¾ 返回值: 根据条件决定函数的返回值是第一个或者第二个参数表达式的计算结
果。当不存在第三个参数“ ELSE-PART”,并且“ CONDITION”展开为空,函
数返回空。
¾ 函数说明: 函数的条件表达式“ CONDITION”决定了函数的返回值只能是
“ THEN-PART”或者“ ELSE-PART”两个之一的计算结果。


¾ 函数示例:
SUBDIR += $(if $(SRC_DIR) $(SRC_DIR),/home/src)
函数的结果是:如果“ SRC_DIR”变量值不为空,则将变量“ SRC_DIR”指定
的目录作为一个子目录;否则将目录“ /home/src”作为一个子目录。

8.2.3 $(strip STRINT)
函数名称:去空格函数— strip。
函数功能:去掉字串(若干单词,使用若干空字符分割)“ STRINT”开头和结尾的
空字符,并将其中多个连续空字符合并为一个空字符。
返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。
函数说明:空字符包括空格、 [Tab]等不可显示字符。
示例:
STR = a b c
LOSTR = $(strip $(STR))
结果是“ a b c”。
“ strip”函数经常用在条件判断语句的表达式中,确保表达式比较的可靠和健壮!
参考 7.2.1.2 关键字“ ifeq” 一小节的例子。
 

 

7.2.1.1关键字“ ifeq”
此关键字用来判断参数是否相等,格式如下:
`ifeq (ARG1, ARG2)'
`ifeq 'ARG1' 'ARG2''
`ifeq "ARG1" "ARG2"'
`ifeq "ARG1" 'ARG2''
`ifeq 'ARG1' "ARG2"'
替换展开“ ARG1”和“ ARG1”后,对它们的值进行比较。如果相同则(条件为
真)将“ TEXT-IF-TRUE”作为 make 要执行的一部分,否则将“ TEXT-IF-FALSE”作
为 make 要执行的一部分(上边的第二种格式)。
通常我们会使用它来判断一个变量的值是否为空(不是任何字符)。参数值可能是
通过引用变量或者函数得到的,因而在展开过程中可能造成参数值中包含空字符(空格
等)。一般在这种情况时我们使用make的“ strip”函数(参考 8.2 文本处理函数 一节)
来对它变量的值进行处理,去掉其中的空字符。格式为:
ifeq ($(strip $(foo)),) #判断一个变量的值是否为空
TEXT-IF-EMPTY
endif
这样,即就是在“ $(foo)”中存在若干前导和结尾空格,“ TEXT-IF-EMPTY”也会被作
为 Makefile 需要执行的一部分。


7.2.1.2关键字“ ifneq”
此关键字是用来判断参数是否不相等,格式为:
`ifneq (ARG1, ARG2)'
`ifneq 'ARG1' 'ARG2''
`ifneq "ARG1" "ARG2"'
`ifneq "ARG1" 'ARG2''
`ifneq 'ARG1' "ARG2"'
2004年9月11日 106
GNU make中文手册
关键字“ ifneq”实现的条件判断语句和“ ifeq”相反。首先替换并展开“ ARG1”和“ ARG1”,
对它们的值进行比较。如果不相同(条件为真)则将“ TEXT-IF-TRUE”作为 make 要
执行的一部分,否则将“ TEXT-IF-FALSE”作为 make 要执行的一部分。
 

 

参考: 《Makefile编程.pdf》

 

 

你可能感兴趣的:(linux系统,makefile)