uboot的主Makefile分析2

1、静默编译:

50-54行

ifeq (,$(findstring s,$(MAKEFLAGS)))                  #如果make后面的参数中没有s,则XECHO = echo,否则则XECHO=空,静默编译

XECHO = echo

else

XECHO = :

endif

$(MAKEFLAGS)是make -后面带的参数(字符串)

$(findstring s,$(MAKEFLAGS))如果MAKEFLAGS中带有s函数findstring返回s,否则返回空

2、2种编译方式(原地编译和单独输出文件夹编译)

56-76行是注解静默编译的使用方法

(1)编译复杂的项目时,Makefile提供2种编译管理方法。默认情况下是原地编译(当前文件中的.c文件编译生成的.o文件放在同一文件夹里面)

(2)原地编译有一些坏处:第一,污染了yuan源文件目录;第二,一套源代码只能按一种配置和编译方法进行处理,无法同时维护2个或2个以上的配置编译方式。

(3)输出文件夹方式编译(linux kernel也支持,而且uboot的这种技术就是linux kernel学习来的)。基本思路就是在编译时另外指定一个输出目录,所有的编译生成的.o文件或者生成的其他文件全都丢到那个输出目录中去。源代码目录不会被污染。

(4)具体用法:默认的就是原地编译。如果需要指定具体的输出目录编译则有2种方式来指定输出目录。

第一种:make O=输出目录

第二种:export BUILD_DIR=输出目录 然后再make

如果两个都指定了(既有BUILD_DIR环境变量存在,又有O=xx),则O=xx具有更高优先级。

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/84256107