免费注册 查看新帖 |

Chinaunix

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

[其他] 请教下makefile的百分号的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-21 23:03 |只看该作者 |倒序浏览
看不懂这段,默认目标all跳到dist之后,是如何执行的?

实际执行是组成了install-xen等等,去install-xen开始执行。

这段是如何进行的?那%号怎么组合成那几个关键字的?在哪个教程的哪张有提到呢?我好像没找到呢?

.PHONY: all
all: dist

# build and install everything into local dist directory
.PHONY: dist
dist: DESTDIR=$(DISTDIR)/install
dist: dist-xen dist-kernels dist-tools dist-stubdom dist-docs
$(INSTALL_DIR) $(DISTDIR)/check
@echo '21111111111111111111'
$(INSTALL_DATA) ./COPYING $(DISTDIR)
$(INSTALL_DATA) ./README $(DISTDIR)
$(INSTALL_PROG) ./install.sh $(DISTDIR)
$(INSTALL_PROG) tools/check/chk tools/check/check_* tools/check/funcs.sh $(DISTDIR)/check
dist-%: DESTDIR=$(DISTDIR)/install
dist-%: install-%
@: # do nothing


# Legacy dist targets
.PHONY: xen tools stubdom kernels docs
xen: dist-xen
tools: dist-tools
kernels: dist-kernels
stubdom: dist-stubdom
docs: dist-docs

.PHONY: prep-kernels
prep-kernels:
for i in $(XKERNELS) ; do $(MAKE) $$i-prep || exit 1; done

.PHONY: install-xen
install-xen:
$(MAKE) -C xen install

.PHONY: install-tools
install-tools: tools/ioemu-dir
@echo 'target = $@'
$(MAKE) -C tools install

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2012-07-21 23:27 |只看该作者
dist-xen dist-kernels dist-tools dist-stubdom dist-docs
dist-%可以匹配上面当中的任何一个。

方便分开来吧。比如make dist-kenels
然后会跳到dist-kernels:部分

dist-%: DESTDIR=$(DISTDIR)/install
dist-%: install-%
同时
dist-kernels: DESTDIR=$(DISTDIR)/install
dist-kernels: install-kernels
也生效

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
3 [报告]
发表于 2012-07-22 00:20 |只看该作者
本帖最后由 captivated 于 2012-07-22 00:23 编辑

回复 1# liuhew


    LZ. 你有心思头痛, 其实更好的办法就是直接敲个东西验证一下, 免得头痛.

    LS的说得没错, 那个 % 就是个通配符(make里面很"专业"地叫它模式匹配符)而已. 敲个简单的
    Makefile, 再运行下(Makefile可以有多目标的, 因此 dist-% 会展开为多个目标, 就是这样子
    而已), 然后你还会头痛这个问题不了?
  1. dist: dist-xen dist-kernels dist-tools

  2. # 这里 $@ 把目标一个个取出来, 嗯.
  3. dist-%:
  4. <TAB>@echo $@
复制代码
我以前也常头痛Makefile. 当面对一个大型构建环境, 几十个主控Makefile, 每个都TMD几百上千行, 还
    TMD夹杂python脚本 链接脚本 == 乱七八糟的东西的时候...
    嗯, 其实我不说你也懂得... 还别提Make那些晦涩的阴暗角落了是吧...

    这种时候比较有用的办法就是把看不懂的主骨架抽离出来一个简单的, 然后写, 然后make. 这是我迄今为止
    所得到的, 解读比王二娘裹脚布还长的Makefile的, 几乎唯一的办法...


论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
4 [报告]
发表于 2012-07-23 09:21 |只看该作者
你把%理解成shell下的*就可以了

论坛徽章:
0
5 [报告]
发表于 2012-07-23 09:25 |只看该作者
发不了帖了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP