• 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的更新。

      

  • 相关阅读:
    Cookie和Session的那些事儿
    【IScroll深入学习】解决IScroll疑难杂症
    使用 iscroll 实现焦点图无限循环
    jquery.mobiscroll仿Iphone ActionSheet省市区联动
    mobiscroll之treelist使用
    jQuery.extend 函数详解
    jQuery插件开发精品教程,让你的jQuery提升一个台阶
    用js实现动画效果核心方式
    js特效,加速度,图标跳动
    详解用CSS3制作圆形滚动进度条动画效果
  • 原文地址:https://www.cnblogs.com/tech-lqh/p/8407400.html
Copyright © 2020-2023  润新知