前面分析的都是多数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的更新。

  

U-Boot Makefile分析(4)具体子Makefile的分析的更多相关文章

  1. U-Boot Makefile分析(2) config.mk分析

    浏览一下U-Boot各个子目录下的Makefile可以看到,几乎他们都会包含$(TOPDIR)/config.mk,那么这个文件进行了什么操作呢?简单概括:读入include/config.mk.in ...

  2. make 与makefile(会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。)

    跟我一起写 Makefile /**/ 陈皓 (CSDN) 概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉 ...

  3. 【linux】-Makefile简要知识+一个通用Makefile

    目录 Makefile Makefile规则与示例 为什么需要Makefile Makefile样式 先介绍Makefile的两个函数 完善Makefile 通用Makefile的使用 通用的Make ...

  4. spring boot实战(第十三篇)自动配置原理分析

    前言 spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理. 在上一篇末尾讲述了Spring ...

  5. Makefile学习与进阶之Makefile.am和$$(M)的意思

    (1)makefile 中,出现$$(M) 是什么意思,发现还是看实际的Makefile长知识啊 在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢 ...

  6. make :err Makefile.ssl is older than Makefile.org. Reconfigure the source tree (via './config' or 'perl Configure'), please.

    内核编译时出现错误 Makefile.ssl is older than Makefile.org. Reconfigure the source tree (via './config' or 'p ...

  7. Can't locate Log/Dispatch.pm in @INC /Makefile out-of-date with respect to Makefile.PL

    mha check的时候报错问题解决:   # masterha_check_ssh --conf=/data/mha/app1.cnf Can't locate Log/Dispatch.pm in ...

  8. 第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)

    目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析stext函数如何启动内核:  (3.1) ...

  9. Fresco 源码分析(一) DraweeView-DraweeHierarchy-DraweeController(MVC) DraweeView的分析

    4. Fresco的内容 为了方便学习,我们先从使用结合官方的文档来分析 4.1 Fresco客户端的使用 在使用Fresco的使用,我们直接使用的是SimpleDraweeView这个类,然后在Ac ...

随机推荐

  1. (项目六)Mha-Atlas-MySQL高可用方案实践

    mha-mysql环境准备: 三台虚拟机,都安装了mysql,都关闭防火墙和selinux,同时在每台虚拟机上都做映射 软件包 1) mha管理节点安装包: mha4mysql-manager-0.5 ...

  2. 第二篇 Flask 中的 Render Redirect HttpResponse

    第二篇 Flask 中的 Render Redirect HttpResponse   1.Flask中的HTTPResponse 在Flask 中的HttpResponse 在我们看来其实就是直接返 ...

  3. 20175314 《Java程序设计》第九周学习总结

    20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...

  4. python的re模块详解

    一.正则表达式的特殊字符介绍 正则表达式 ^ 匹配行首 $ 匹配行尾 . 任意单个字符 [] 匹配包含在中括号中的任意字符 [^] 匹配包含在中括号中的字符之外的字符 [-] 匹配指定范围的任意单个字 ...

  5. 解决在vscode中eslint在vue后缀文件中保存时无法自动格式化的问题

    在setting.json中加入如下内容 { "eslint.autoFixOnSave": true, "eslint.validate": [ " ...

  6. 回溯+DFS 强化

    1020. 飞地的数量 思路:从4条边界出发,把能遍历到的1全部变成0.剩下的1就是边界所不能到达的点,统计一下1的数量即可. 解题思路:DFS.  时间超越100%python用户提交 ,内存超越8 ...

  7. select 两层 第二个select需要加别名

    select t.id from (select xxx) t

  8. mysql导出导入数据

    使用sql语句导出数据: 导出时如果不写绝对路径,会提示The MySQL server is running with the --secure-file-priv option so it can ...

  9. 【Selenium】【BugList7】执行driver.find_element_by_id("kw").send_keys("Selenium"),报错:selenium.common.exceptions.InvalidArgumentException: Message: Expected [object Undefined] undefined to be a string

    [版本] selenium:3.11.0 firefox:59.0.3 (64 位) python:3.6.5 [代码] #coding=utf-8 from selenium import webd ...

  10. Java+Selenium自动化对非输入框的日历或日期控件的处理

    如图:          1.问题描述: 在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这 ...