QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eCos linux goAhead
搜索
发新帖

33

主题

0

听众

237

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2013-1-4
威望
0
金钱
194
贡献
0
注册时间
2012-5-1
积分
237
帖子
38
主题
33
精华
1
UID
2
发表于 6 天前 |显示全部楼层
更多
本帖最后由 reille 于 2012-12-31 22:37 编辑

$(eval)调用:


当make扫描makefile时,如果发现包含$(eval)的语句,会实时展开eval的参数,然后将展开的结果字符串插入到脚本当前位置,作为脚本还没扫描的一部分继续扫描。下面是一段测试脚本:

  Name = a1
  Step1 := $(Name)

  $(eval Name=a2)
  Step2 := $(Name)

  Name = a3
  Step3 := $(Name)

  all:

   echo $(Name)
   echo $(Step1)
   echo $(Step2)
   echo $(Step3)


  然后来分析(注意这里的措辞):第1行在数据库中添加Name="a1";第2行添加Step1="a1"(进行过一次实时展开);第3行等价于脚本Name=a2,因此是修改数据库,将Name的字面值从"a1"改为"a2";第4行实时展开后记录Step2="a2";第5行修改Name为"a3";第6行记录Step3="a3"。最后运行make打印"a3 a1 a2 a3"(这里的空格实际是换行)。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

无觅相关文章插件

申请友链|手机版|关于本站|eCos技术网 ( 粤ICP备12094833号-1 )   

GMT+8, 2013-1-6 17:26 , Processed in 0.073717 second(s), 31 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部