Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387927
  • 博文数量: 120
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-27 18:15
文章分类

全部博文(120)

文章存档

2016年(13)

2015年(41)

2014年(66)

我的朋友

分类: 其他平台

2014-12-23 15:44:02

1、在Makefile中我们经常看到"="、":="、"?="、"+="这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验
新建一个Makefile,内容为:

点击(此处)折叠或打开

  1. ifdef DEFINE_VRE
  2.     VRE = “Hello World!”
  3. else
  4. endif

  5. ifeq ($(OPT),define)
  6.     VRE ?= “Hello First!”
  7. endif

  8. ifeq ($(OPT),add)
  9.     VRE += “Kelly!”
  10. endif

  11. ifeq ($(OPT),recover)
  12.     VRE := “Hello Again!”
  13. endif

  14. all:
  15.     @echo $(VRE)
在命令行键入以下make命令:
    make DEFINE_VRE=true OPT=define 输出:Hello World!
    make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
    make DEFINE_VRE=true OPT=recover  输出:Hello World! Again!
    make DEFINE_VRE= OPT=define 输出:Hello World! First!
    make DEFINE_VRE= OPT=add 输出:Kelly!
    make DEFINE_VRE= OPT=recover 输出:Hello World! Again!

从上面的结果中我们可以清楚的看到他们的区别了
    = 是最基本的赋值
    := 是覆盖之前的值
    ?= 是如果没有被赋值过就赋予等号后面的值
    += 是添加等号后面的值

2、再举个例子:
* “=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
    x = foo
    y = $(x) bar
    x = abc
在上例中,y的值将会是 abc bar ,而不是 foo bar 。

* “:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
    x := foo
    y := $(x) bar
    x := abc
在上例中,y的值将会是 foo bar ,而不是 abcbar 了。
阅读(941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~