免费注册 查看新帖 |

Chinaunix

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

[C] @w##GDSDBVSSDV [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-17 10:55 |只看该作者 |倒序浏览
本帖最后由 yxyx3258 于 2011-10-26 18:06 编辑

ADSFNKASNFAFAIWG4EW

论坛徽章:
0
2 [报告]
发表于 2011-05-18 22:36 |只看该作者
应该是前面一段比较难吧,后面一段主要是调用 set 函数了,应该比较容易些。
前面又可以分成两段,一段是使用env环境的,else之后的是第二段。

#如果定义 env=yes ,就是make的时候使用 make env=yes 这种用法
ifeq ($(env),yes)
#多行定义set开始 define表示多行定义
define set
#变量替换,展开,直接理解为 ifneq 即可
#使用 origin查询变量 $(1) 的定义方式,确定是不是环境变量,是的话就会返回 environment
#然后使用ifneq进行判断
$(eval ifneq ($$(origin $(1)),environment)
#如果在环境变量中没有定义,那么就设置 $(1)=$(2)
$(1) = $(2)
else
#如果环境存在,那么就使用 override指定,防止环境变量覆盖了Makefile中的定义
override MAKE := $(1)="$($(strip $(1)))" $(MAKE)
#与eval配对
endif)
#结束多行定义
endef
#否则,不开启环境变量情况下
else
#定义 set 变量
set = $(eval $(1) = $(2))
#整个if结束
endif

后文的 call 可以这样理解,用于进行自定义带参数变量的替换
$(call set, CROSS, )   set CROSS=
$(call set, CC, $$(CROSS)gcc)  set CC=gcc
剩余的内容应该比较容易理解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP