Chinaunix首页 | 论坛 | 博客
  • 博客访问: 778999
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类: LINUX

2011-08-23 13:50:41

可以为某个目标设置局部变量,这种变量被称为“Target-specific Variable”,它可以和“全局变量”同名,因为它的作用范围只在这条规则以及连带规则中,所以其值也只在作用范围内有效。而不会影响规则链以外的全局变量的值。

其语法是:

:

: overide

可以是前面讲过的各种赋值表达式,如“=”、“:=”、“+=”或是“?=”。第二个语法是针对于make命令行带入的变量,或是系统环境变量。这个特性非常的有用,当我们设置了这样一个变量,这个变量会作用到由这个目标所引发的所有的规则中去。如:

prog : CFLAGS = -g

prog : prog.o foo.o bar.o

$(CC) $(CFLAGS) prog.o foo.o bar.o

在这个示例中,不管全局的$(CFLAGS)的值是什么,在prog目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),$(CFLAGS)的值都是“-g

 

条件表达式的语法为:

endif

以及:

else

endif

其中表示条件关键字,如“ifeq”。这个关键字有四个。

第一个是我们前面所见过的“ifeq

ifeq (, )

ifeq '' ''

ifeq "" ""

ifeq "" ''

ifeq '' ""

比较参数“arg1”和“arg2”的值是否相同。当然,参数中我们还可以使用make的函数。如:

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

endif

这个示例中使用了“strip”函数,如果这个函数的返回值是空(Empty),那么就生效

第二个条件关键字是“ifneq”。语法是:其比较参数“arg1”和“arg2”的值是否相同,如果不同,则为真。和“ifeq”类似。

第三个条件关键字是“ifdef”。语法是:

ifdef

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

示例一:

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

示例二:

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

第一个例子中,“$(frobozz)”值是“yes”,第二个则是“no

第四个条件关键字是“ifndef”。其语法是:

ifndef

这个我就不多说了,和“ifdef”是相反的意思。

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~