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具有更高优先级。