Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670944
  • 博文数量: 81
  • 博客积分: 1659
  • 博客等级: 上尉
  • 技术积分: 1286
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 16:36
个人简介

专注于嵌入式和图像处理

文章分类

全部博文(81)

文章存档

2014年(1)

2013年(7)

2012年(46)

2011年(27)

分类: LINUX

2012-09-01 10:57:50

先看下面的Makefile:

  1. #example
  2. B := $(A)
  3. A = later
  4. all:
  5.     @echo $(B)
 执行make命令,我们发现什么都没输出,我们将第3行的:=换成=。

  1. #example
  2. B = $(A)
  3. A = later
  4. all:
  5.     @echo $(B)
执行make,输出later。
分析:B :=$(A)时,它只会到这句语句之前去找A的值,因A没有定义所以什么都没有输出。
      B = $(A)时,虽然该语句之前A没有定义,但是在其后定义了,所以能输出later。

  1. #example
  2. A = before1
  3. A = before2
  4. B := $(A)
  5. A = later1
  6. all:
  7.     @echo $(B)
执行make,输出before2。
解释:上面Makefile最后一句echo前面的@符号的作用是禁止回显。如我们的Makefile改为如下:

  1. #example
  2. A = before1
  3. B = $(A)
  4. B = before2
  5. C = $(B)
  6. A = later1
  7. B = later2
  8. all:
  9.     echo $(C)
执行make:
echo later2
later2
分析:C = $(B),应该从Makefile文件最后往前找B,得到B = later2,将最后一句全部变量代替即为:echo later2,因echo前没有@符号,回显该语句,然后再输出later2。
注意:当我们直接在终端上要用echo输出某个变量的值时,是不能加()的。如我们要输出PAHT
应该用echo $PATH,而不能用echo $(PATH),否则会报错,注意'$'不能少了。
Makefile中"?=",含义为:如没定义,则赋值。
如:TEMP ?= var 等价于
    ifeq($(TEMP),undefined)
    TEMP = var
    endif




阅读(17220) | 评论(0) | 转发(6) |
1

上一篇:屏蔽在线视频广告

下一篇:Vi命令

给主人留下些什么吧!~~