免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1981 | 回复: 3
打印 上一主题 下一主题

Makefile中的变量问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-17 12:12 |只看该作者 |倒序浏览
makefile的手册中说,变量的定义要注意区别两种形式(=和:=)
以前没有特别注意,现在仔细测试一下,好像跟描述的有出入
测试代码如下:

  1. time = $(shell date +%s)
  2. start_time  := $(time)
  3. current_time = $(time)
  4. variable_test:
  5.         @ echo start_time : $(start_time)
  6.         @ echo current_time : $(current_time)
  7.         @ sleep 10
  8.         @ echo start_time : $(start_time)
  9.         @ echo current_time : $(current_time)
复制代码


原来的理解是start_time是立即展开的,是程序运行时的时间
而current_time 是延后展开的,应该在执行的时候才展开,可以表示执行时的时间
但实际运行的时候两者都是立即展开的,所有时间都是相同的
??
是版本问题吗,我的make版本是v3.79.1

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-12-17 19:40 |只看该作者
我觉得 GNU make 中关于这个问题的例子更清楚些,建议看看。

论坛徽章:
0
3 [报告]
发表于 2007-12-18 12:38 |只看该作者
搞清楚了
理解错误
应该是这样的,即时展开变量是在make扫描变量的时候展开
而延后展开是在make开始解释执行程序的时候展开,而不是在包含延后变量的代码执行的时候才展开
(每次target执行时延后展开)
所以上面的例子在指令序列中加入延时没有作用
应该如下方式加入延时:

  1. time = $(shell date +%s)
  2. start_time  := $(time)
  3. current_time = $(time)
  4. val  := $(shell sleep 5)
  5. variable_test:  target1
  6.         @ echo start_time : $(start_time)
  7.         @ echo current_time : $(current_time)
  8. target1:
  9.         @ echo start_time : $(start_time)
  10.         @ echo current_time : $(current_time)
  11.         @ sleep 5
复制代码

[ 本帖最后由 Atlantiscw 于 2007-12-18 15:00 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-12-18 12:39 |只看该作者
谢谢斑竹提醒!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP