zoukankan      html  css  js  c++  java
  • U-Boot Makefile分析(4)具体子Makefile的分析

      前面分析的都是多数Makefile要读入的文件,这次我们以drivers/mtd/nand/Makefile为例,分析一个具体的子Makefile是如何工作的。

      子Makefile的结构是固定的:

    include $(TOPDIR)/config.mk     读入配置信息

    LIB := $(obj)lib_name.o        当前Makefile的目标文件

    添加源文件,COBJS-y是要编译的对象。

    COBJS := $(COBJS-y)        指定目标文件

    SRCS := $(COBJS:%.o=%.c)     指定源文件

    OBJS := $(addprefix $(obj),$(COBJS)) 给目标文件加上obj前缀

    all: $(LIBS)              伪目标

    $(LIBS): $(obj).depend $(OBJS)    链接所有目标文件成当前lib_name.o

      $(call cmd_link_o_target, $(OBJS))

    #include $(SRCTREE)/rules.mk    依赖文件的生成

    sinclude $(obj).depend        汇总的依赖信息

      指定源文件的时候,会根据config.mk读入的autoconf.mk决定某个目标文件是否需要编译生成,如:

    COBJS-$(CONFIG_NAND_S5PV210) += s5p_nand.o

      如果include/autoconf.mk中CONFIG_NAND_S5PV210=y,那么s5p_nand.o就会被编译生成,并最终加入到libnand.o中。

      每一个源文件,在汇总的依赖信息中都有一条依赖描述信息,形如:

    s5p_nand.o: s5p_nand.c

    header1

    header2

    ,,,

      但是依赖信息下面并没有执行命令,需要执行的命令放在了config.mk中静态模式中,也就是说依赖是依赖,静态模式是静态模式,静态模式可以决定执行什么命令,但是依赖就是只是一种描述。当源文件有了改动,那么LIB的依赖OBJS就比目标新,显然就要执行cmd_link_o_target更新,当头文件发生了改动,根据依赖信息,对应的.o目标文件就会更新,而且.depend也会更新,所以一定会带来目标LIB的更新。

      

  • 相关阅读:
    jQuery知识总结
    WEB架构师成长之路之2
    利用Travis CI 让你的github项目持续构建(Node.js为例)
    C#实现UDP分包组包
    win7下安装32位GoSublime Package
    爬虫部分技术要点浅析
    如何使用“依赖注入”的
    分布式ACM Online Judge 架构设计
    “容器组件服务”模型
    Maven学习
  • 原文地址:https://www.cnblogs.com/tech-lqh/p/8407400.html
Copyright © 2011-2022 走看看