免费注册 查看新帖 |

Chinaunix

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

[C++] 关于Makefile中的变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-07 23:22 |只看该作者 |倒序浏览
最近在看跟我一起学Makefile,遇到两个问题问下
1.为什么下面的makefile中的变量two-lines的值不是foo
  1. test:
  2.      @echo $(two-lines)
  3.   define two-lines
  4.      echo $(bar)
  5.   endef
复制代码
2.在跟我一起学Makefile的第七章,第四节,追加变量的最后讲到
  1. variable = value
  2. variable += more
  3. 由于前次的赋值符是“=”,所以“+=”也会以“=”来做为赋值,那么岂不会发生变量的递补归定义,这是很不好的,所以make会自动为我们解决这个问题,我们不必担心这个问题。
复制代码
尝试google了下,没找到什么是递补归,求科普?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-04-07 23:23 |只看该作者
爱莫能助, makefile全靠工具生成, 手写只会一个.o一个.o的写。

论坛徽章:
0
3 [报告]
发表于 2013-04-07 23:25 |只看该作者
PS:上面的Makefile粘错了,抱歉,另外我没定义bar这个变量
  1. test:
  2.         @echo $(two-lines)
  3.        
  4. define two-lines
  5.         echo foo
  6.         echo $(bar)
  7. endef
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-04-08 08:36 |只看该作者
还是用工具吧  我觉得总会走上工具这条路。。。。。

论坛徽章:
0
5 [报告]
发表于 2013-04-08 08:45 |只看该作者
你还未够水准呢 发表于 2013-04-08 08:36
还是用工具吧  我觉得总会走上工具这条路。。。。。


感谢回复,懂点总比不懂强

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
6 [报告]
发表于 2013-04-08 09:09 |只看该作者
很明显作者笔误了,就是递归定义的意思。

Makefile中有两种变量,
1. 使用 = 定义的变量,这类变量在其被使用时求值。
2. 使用 := 定义的变量,这类变量在其定义处立即求值,跟C语言初始化一样一样的。

LZ举的例子不恰当,我给你举一个。
var = $(value)
value = $(var)
这种情况,var是被使用时才求值,那么在使用var时就发生了无限的递归。

make 是一个解释器,Makefile是图灵完备的语言,就是说跟一般的程序设计语言的能力是等同的。它使用Lisp Like的语法定义。

make 是双阶段执行的。
第一阶段读入所有的Makefile, 并建立有向无环图的数据结构。
第二阶段遍历解析有向无环图,并执行其中的语义动作。

使用 = 定义的变量是在第二阶段才求值的。
使用 := 定义的变量是在第一阶段解析Makefile时就求值的。

这样说LZ清楚了没。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2013-04-08 09:19 |只看该作者
回复 4# 你还未够水准呢


    你这名字 一看见让人不爽,讨人烦

论坛徽章:
0
8 [报告]
发表于 2013-04-08 11:49 |只看该作者
captivated 发表于 2013-04-08 09:09
很明显作者笔误了,就是递归定义的意思。

Makefile中有两种变量,


感谢回复,可以再解下第一个问题么?

论坛徽章:
0
9 [报告]
发表于 2013-04-08 12:52 |只看该作者
这是我对自己说的回复 7# goldenfort


   

论坛徽章:
0
10 [报告]
发表于 2013-04-08 13:04 |只看该作者
linux_c_py_php 发表于 2013-04-07 23:23
爱莫能助, makefile全靠工具生成, 手写只会一个.o一个.o的写。
用的什么工具?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP