前语:
在工作中发现很多新来的同事不太注重编译的细节,其实如果我们只有一个产品对应一个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=且需要保持一致。
本文介绍了 U-Boot 开发中重要的编译技巧——静默编译与指定路径编译的方法。静默编译通过特定参数减少编译过程中的输出信息,而指定路径编译则用于解决多产品维护时的目标文件组织问题。
两种编译&spm=1001.2101.3001.5002&articleId=73603573&d=1&t=3&u=d143ac91a3e8413796cb4baf1cf2c6a1)
1639

被折叠的 条评论
为什么被折叠?



