uboot分析之Makefile(二)两种编译

  • Post author:
  • Post category:其他


前语:

在工作中发现很多新来的同事不太注重编译的细节,其实如果我们只有一个产品对应一个uboot那无所谓,直接配置然后make搞定一切。但是往往一个团队会维护和开发几款产品,要不然小公司就饿死了,除非公司很有钱不依靠研发产品养活公司
委屈
。往往都是一个uboot对应很多产品,这样复用性较高,内核也是如此,底层的开发不用跟风,不是越新越好,更何况是工业级产品。底层的更新周期要远远大于应用层。因为底层更新一周 成本太高了。我想同行一定有体会。

这样对于不用的产品我们需要在不同路径下生成所需的内容,如果这几个产品都有你一个人来维护那就更有必要了。

一、静默编译

#########################################################################
# Allow for silent builds
ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif

#########################################################################
#

我们来分析一下上面的一小段代码:

ifeq (

,

$(findstring s,$(MAKEFLAGS))) 这一句当中有

两个

逗号“,”   第一个逗号前面是有参数的,是一个“空”,先往下看,若果ifeq成立,XECHO = echo 否则XECHO = :也就说说顾名思义只有echo是打印信息的若想不打印信息 ifeq需要

不成立。



如果不成立需要$(findstring s,$(MAKEFLAGS))不为空。 MAKEFLAGS 是编译时传递给 命令make 的参数,findstring会从MAKEFLAGS 寻找是否有“s”如果有则进行“静默编译”。

uboot 编译有一种编译通常称为“静默编译”或者“安静编译”,也就是打印出来的信息较少,没有Makefile中的信息。其实有些人还是喜欢多看些打印信息的,因为觉得比较酷,跟黑客似的,呼啦呼啦的比较炫,满屏都是。其实编译方法的选择并不是为了少或者多输出打印信息,而是决定编译出的中间文件和目标文件的存放问题。

二、指定路径编译

在uboot的主目录中的README文件的4377行,有这样一段说明。其实讲解的两种我只用过第一种,第二种可以自己尝试,因为第一种方法的优先级较高,即便配置了BUILD_DIR 如果make O= …第二种方法失效。

Makefile开头的部分:也介绍的非常清晰。

还有一个关键点就是,在清理、配置、编译阶段都要使用 make O=且需要保持一致。



版权声明:本文为linux_rookie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。