makefile(五):makefile的条件判断与循环

如果说任何程序都可以由顺序,分支,循环来组成的话,前面介绍的相当于顺序部分,本部分介绍分支和循环
makefile的条件判断和循环非常简单。

一.条件判断

条件判断的语法如下:

ifeq (条件表达式) 
运行体
endif
ifeq (条件表达式) 
运行体
else
运行体
endif

解释:如果条件表达式的返回值为真,则运行下面的运行体,否则运行else后面的运行体,每一个条件表达式都必须以endif作为结尾
条件表达式可以写成如下的形式

`ifeq (ARG1, ARG2)'
`ifeq 'ARG1' 'ARG2''
`ifeq "ARG1" "ARG2"'
`ifeq "ARG1" 'ARG2''
`ifeq 'ARG1' "ARG2"'

除了ifeq以外,还有ifneq,格式同ifeq相同,他表示的意思与ifeq相同,不在赘述。
除了判断两个参数是否相等以外,还可以通过ifdef来判断一个变量是否有值如下:

ifdef 变量名
运行体
endif

同样它也可以使用带else的形式,格式如ifeq和ifneq
他表示的意思是:如果变量有值,那么就运行相应的运行体。
举例如下:

ifdef wanbiao
name=wan
else
name=biao
endif

这个例子的意思是:当wanbiao这个变量有值得时候,则name变量的值被赋值为wan,否则被赋值为biao
这里需要注意一下:当wanbiao这个变量的值是一个引用值,在判断的时候,并不会被展开如下:

firstname=
wanbiao=$(firstname)
ifdef wanbiao
name=wan
else
name=biao
endif

这个的结果将是 name的值为wan,尽管firstname的值为空, 且wanbiao的值为空。但是ifdef只判断最浅层是否有赋值。当wanbiao=$(firstname)时,wanbiao被判定为已经赋值,即值为$(firstname),因此为true

二.循环

使用循环可以有两种方法:1.shell里面的循环2.直接使用makefile里面的循环函数
因为makefile里面可使用shell命令因此,shell里面的循环也可以书写在make里面,shell里面的循环书写,可以参考前面关于shell的介绍。这里介绍makefile里面专门用于循环的函数。
makefile里面没有明确的关于循环的语法。但是可以使用循环函数foreach,达到循环的目的
foreach函数如下。

$(foreach VAR,LIST,TEXT)

将LIST里面的值依次赋值给VAR,然后再运行TEXT里面的内容。
返回值: 空格分割的多个表达式“ TEXT”的计算的结果
举例如下

dirs := a b c d
files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))

分别取出$(dirs)的值赋值给dir,然后运行后面的,并将结果返回给files,因此files的值为

a/* b/* c/* d/*

你可能感兴趣的:(linux程序设计)