@

1. 前言

 UBOOT版本:uboot2018.03,开发板myimx8mmek240。

2. 概述

当我们执行的命令是make命令时 ,由于后面没有带参数,因此makefile会编译默认遇到的第一个目标。

3. 老版本UBOOT(背景)

# 顶层Makefile
...... # dependency target in autoconf.mk.dep from being the default.
all: (1) //空命令
sinclude $(obj)include/autoconf.mk.dep
sinclude $(obj)include/autoconf.mk ...... all: $(ALL) (2)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@

1. 如果没有第一个all :

直接执行了sinclude。打开autoconf.mk.dep看到第一行就是include/autoconf.mk: include/common.h 。这就是makefile遇到的第一个目标include/autoconf.mk。因此将include/autoconf.mk当做终极目标执行了。此时的include/autoconf.mk是前一次刚产生的(make xxx_deconfig),所以是最新的,makefile认为没有必要重新执行,

因此什么都不做。最后输出了make: `include/autoconf.mk' is up to date。空命令(all:)的唯一作用是防止make在执行时,试图为重建这个目标去查找隐含命令,这个隐含的命令就是执行第一个遇到的目标。

2. 如果有第一个all :

makefile就知道需要执行的终极目标是 all。而不是include的autoconf.mk.dep里面的include/autoconf.mk。继续执行到遇到后面的all: 后面的all将覆盖前面的all。所以最终执行的是第二个all。

因此第一个all的含义就是 如果你执行make的时候没有带任何其他目标,单独的一个make,可以避免以autoconf.mk.dep里面的include/autoconf.mk作为错误目标

如果你执行make的时候带了目标,这个all:有不有都无所谓。

4. 新版本UBOOT

# 顶层Makefile
# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all //伪目标all
ifeq ($(KBUILD_EXTMOD),) //假设未定义KBUILD_EXTMOD
_all: all //_all 是顶层Makefile第一个目标,依赖是all (1)
else
_all: modules
endif ...... all: $(ALL-y) cfg (2)
ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
@echo "===================== WARNING ======================"
@echo "This board uses CONFIG_DM_I2C_COMPAT. Please remove"
@echo "(possibly in a subsequent patch in your series)"
@echo "before sending patches to the mailing list."
@echo "===================================================="
endif
@# Check that this build does not use CONFIG options that we do not
@# know about unless they are in Kconfig. All the existing CONFIG
@# options are whitelisted, so new ones should not be added.
$(call cmd,cfgcheck,u-boot.cfg)

因此第一个all的含义就是 如果执行make的时候没有带任何其他目标,单独的一个make,那么_all作为顶层Makefile第一个目标,自然就成了默认执行的目标,而_all的依赖又是all,因此实际真正的执行的是上述代码中第(2)条

5. 参考

(1)uboot makefile里面的两个all:作用(伪目标,空命令)

UBOOT编译--- UBOOT顶层Makefile中目标_all和all的关系及背景(四)的更多相关文章

  1. uboot编译: uboot编译配置和编译过程

    jz2440: 韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第09课第2节 u-boot分析之Makefile结构分析.WMV <嵌入式linux完全开发手册> 15 ...

  2. UBOOT编译--- make xxx_deconfig过程详解(一)

    make xxx_deconfig过程详解 1. 前言 2. 概述 3. build变量的定义 4. 目标%config的定义 4.1 依赖 scripts_basic 4.1.1 语句$(if $ ...

  3. 编译uboot提示libasm-offsets.c10 error bad value (armv5)解决方法

    编译uboot-2016.09提示如下错误: lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch 解决方法: 1.在命 ...

  4. [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  5. [uboot] (第四章)uboot流程——uboot编译流程 (转)

    以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为例 [uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(B ...

  6. Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121572767红胖子(红模仿)的博文大全:开发技术集合( ...

  7. 内核顶层Makefile相关4

    http://www.groad.net/bbs/simple/?f104.html make 的递归执行与 MAKEFLAGS 变量 make 的递归调用是指:在 Makefile 中使用 make ...

  8. uboot 顶层makefile细节分析

    uboot的源文件众多,学习庞然大物首先找到脊椎--顶层的makfile,逐一破解.但是,uboot的makefile同样是一个庞然大物,所以也要找到它的主线.倘若过分专注部分细节,很难做到把握全局, ...

  9. TQ210 —— S5PV210 uboot顶层Makefile分析

    转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...

  10. u-boot顶层Makefile分析

    1.u-boot制作命令 make forlinx_nand_ram256_config: make all; 2.顶层mkconfig分析,参考 U-BOOT顶层目录mkconfig分析 mkcon ...

随机推荐

  1. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  2. KingbaseES R6 集群通过备库clone在线添加新节点

    案例说明: KingbaseES R6集群可以通过图形化方式在线添加新节点,但是在添加新节点clone环节时,是从主库copy数据到新的节点,这样在生产环境,如果数据量大,将会对主库的网络I/O造成压 ...

  3. 腾讯云即时通信 IM 服务 实例项目

    腾讯云即时通信 IM 服务  https://github.com/tencentyun/TIMSDK

  4. Go工程化 - 依赖注入

    我们在微服务框架kratos v2的默认项目模板中kratos-layout使用了google/wire进行依赖注入,也建议开发者在维护项目时使用该工具. wire 乍看起来比较违反直觉,导致很多同学 ...

  5. flutter系列之:Material中的3D组件Card

    目录 简介 Card详解 Card的使用 总结 简介 除了通用的组件之外,flutter还提供了两种风格的特殊组件,其中在Material风格中,有一个Card组件,可以很方便的绘制出卡片风格的界面, ...

  6. Minio VS Ceph

    文章转载自:https://blog.csdn.net/Moolight_shadow/article/details/123204412

  7. 升级Gogs版本

    今天早上收到阿里云发的报警短信,大致内容如下: 前提分析: 公司代码代码仓库使用是Gogs搭建的,版本是0.11.34,二进制方式安装的,连接的是其他主机上的MySQL数据库,因此被检测到有这个漏洞 ...

  8. 在 WPF 中实现融合效果

    1. 融合效果 融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去"粘"在一起.在之前的一篇文章中,我使用 Win2D 实现了融合效果,效果如下: 不过 Win2 ...

  9. 关于Oracle-VM-VirtualBox的安装与说明

    VirtualBox 是一款开源虚拟机软件.VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件 使用Qt编写,在 Sun 被 Oracle 收购 ...

  10. POJ2104 K-th number (整体二分)

    刚学了整体二分,用这种解法来解决这道题. 首先对于每个询问时可以二分解决的,这也是可以使用整体二分的前提.将原来的序列看成是插入操作,和询问操作和在一起根据值域进行二分.用树状数组来检验二分值. 1 ...