免费注册 查看新帖 |

Chinaunix

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

makefile中的变量怎么引用?$$var吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 10:01 |只看该作者 |倒序浏览
5可用积分
dir=/*
.PHONY show
show:
        @for i in $(dir);do echo $$i;done

想请教的是 为什么引用dir是$dir,而引用i是用$$i
是不是因为i是局部变量, dir是全局变量
两种变量的引用方式所决定的
我只是猜测 还请高手指教

最佳答案

查看完整内容

$$ 在这里是转义 $,$$i 最终 shell 看到的是 $i; 而 $(dir) 最终 shell 看到的是 $(dir) 的值。

论坛徽章:
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 [报告]
发表于 2009-05-20 10:01 |只看该作者
原帖由 cuer_2 于 2009-5-20 10:01 发表
dir=/*
.PHONY show
show:
        @for i in $(dir);do echo $$i;done

想请教的是 为什么引用dir是$dir,而引用i是用$$i

$$ 在这里是转义 $,$$i 最终 shell 看到的是 $i; 而 $(dir) 最终 shell 看到的是 $(dir) 的值。

论坛徽章:
0
3 [报告]
发表于 2009-05-20 10:37 |只看该作者
原帖由 MMMIX 于 2009-5-20 10:33 发表

$$ 在这里是转义 $,$$i 最终 shell 看到的是 $i; 而 $(dir) 最终 shell 看到的是 $(dir) 的值。


在这里为什么需要转义?
不能用$i吗?

论坛徽章:
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
4 [报告]
发表于 2009-05-20 11:02 |只看该作者
原帖由 cuer_2 于 2009-5-20 10:37 发表


在这里为什么需要转义?
不能用$i吗?

需要在 Shell 中执行的是 for i in value-of-dir-in-makefile; do echo $i ; doen 这个语句写到 Makefile 中,$i 中的 $ 当然需要转义了,要不然 Shell 看到的就是 for i in value-of-dir-in-makefile; do echo value-of-i-in-makefile; done 这个显然是不正确的。

论坛徽章:
0
5 [报告]
发表于 2009-05-20 11:21 |只看该作者
原帖由 MMMIX 于 2009-5-20 11:02 发表

需要在 Shell 中执行的是 for i in value-of-dir-in-makefile; do echo $i ; doen 这个语句写到 Makefile 中,$i 中的 $ 当然需要转义了,要不然 Shell 看到的就是 for i in value-of-dir-in-makefile; do ec ...



makefile中的语句是由shell命令和makefile自己的语法组成的吧
shell的命令又shell来执行 
makfile的语法由make来解析
我的for循环属于makefile的语法
把echo $i这个shell的命令写入makefile中,就把$给转义了 

我这样理解那儿有问题 我也是初用makefile不久 
还请多指教

论坛徽章:
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
6 [报告]
发表于 2009-05-20 11:47 |只看该作者
原帖由 cuer_2 于 2009-5-20 11:21 发表

我的for循环属于makefile的语法

属于 Shell 的语法

论坛徽章:
0
7 [报告]
发表于 2009-05-20 13:10 |只看该作者
原帖由 MMMIX 于 2009-5-20 11:47 发表

属于 Shell 的语法



那我就不明白
需要在 Shell 中执行的是 for i in value-of-dir-in-makefile; do echo $i ; doen 这个语句写到 Makefile 中,$i 中的 $ 当然需要转义了
的意思了

论坛徽章:
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
8 [报告]
发表于 2009-05-20 14:33 |只看该作者
原帖由 cuer_2 于 2009-5-20 13:10 发表



那我就不明白
需要在 Shell 中执行的是 for i in value-of-dir-in-makefile; do echo $i ; doen 这个语句写到 Makefile 中,$i 中的 $ 当然需要转义了
的意思了

这个 for 循环是 Shell 的语法,但是 make 也会处理这句,做做变量替换啥的,然后把处理后的结果交给 Shell 去执行。这么说明白了么?

BTW,在学习具体的语法之前,最好能对 makefile 的工作原理有个概念性的认识,这个后面学习就会简单许多。否则,一些问题别人解释了你也要费半天劲才能听明白。

[ 本帖最后由 MMMIX 于 2009-5-20 14:40 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-05-20 15:10 |只看该作者
明白了哈

我没有专门的看这方面的书 只是用的时候折腾一下
多谢你的建议 受教了

论坛徽章:
0
10 [报告]
发表于 2009-06-17 14:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP