嵌入式学习——2.5 uboot主Makefile内容分析

uboot中的主Makefile内容分析

1. 版本号

VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h

U_BOOT_VERSION变量使用引用被赋值为1.3.4,VERSION_FILE是编译生成的文件,

2. HOSTARCH和HOSTOS环境变量

HOSTARCH := $(shell uname -m | \
	sed -e s/i.86/i386/ \
	    -e s/sun4u/sparc64/ \
	    -e s/arm.*/arm/ \
	    -e s/sa110/arm/ \
	    -e s/powerpc/ppc/ \
	    -e s/ppc64/ppc/ \
	    -e s/macppc/ppc/)

HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
	    sed -e 's/\(cygwin\).*/cygwin/')

export	HOSTARCH HOSTOS

通过最下面一行的export可以确定两个变量为环境变量,且通过|管道符号,得出HOSTARCH的值为i386,HOSTOS的值为linux。

3. 静默编译

ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif

ifeq(a,b)是用来判断a和b是否相等,上述代码中a为空,则只要变量MAKEFLAGS里面没有s,则函数不成立,就不会打印编译信息,即在编译时make -s就会静默编译

4. 原地编译和单独输出文件夹编译

  • 编译复杂项目时,默认情况下当前文件夹中的.c文件编译生成的.o文件会被放在同一文件夹下,这种方式为原地编译。该方法会污染源代码,且一套源代码只能按照一种配置和编译方法进行处理,无法同时维护2个及以上的配置

  • 为了解决原地编译的缺陷,uboot支持单独输出文件夹编译。基本思路为在编译时另外指定一个输出目录,将所有编译生成的.o文件或其中文件放到一个输出目录中,不会对源代码污染,而输出目录承载了本次配置编译的所有结果。

    • 具体方法有两种:

      • make O=输出目录
        
      • export BUILD_DIR=输出目录;make
        

你可能感兴趣的:(uboot,linux,嵌入式)