main.mk

1.检查版本号,设置环境变量(BUILD_SYSTEM)和缺省的目标。
$(MAKE_VERSION) >= 3.81,
BUILD_SYSTEM= build/core
2.包含文件BUILD_SYSTEM/config.mk。

根据配置信息和主机目标机信息,设置一些变量。

3.包含文件BUILD_SYSTEM/cleanbuild.mk。

如果当前配置改变,强制删除上次的编译结果

4.包含文件OUT_DIR/versions_check.mk。

就设置了VERSIONS_CHECKED。如果版本序号改变,即VERSION_CHECK_SEQUENCE_NUMBER!=VERSIONS_CHECKED,检查文件系统是否大小写不敏感。文件路径上是否没有空格。JAVA,JAVAC的版本是否是1.6。

5.包含文件BUILD_SYSTEM/definitions.mk。

定义了很多函数供makefile文件系统使用。
主要的是transform-xxx-to-xxx的形式,比如transform-cpp-to-o。并定义了一个make目标dist,额外的拷贝一些重要的文件到目标文件夹。

6.根据TARGE_BUILD_VARIANT,设置tags_to_install,ADDITIONAL_DEFAULT_PROPERTIES

TARGE_BUILD_VARIANT |tags_to_install|ADDITIONAL_DEFAULT_PROPERTIES
|—|——–|—|
user| user| ro.secure=1 ro.allow.mock.location=0
eng | user debug eng | ro.setupwizard.mode=OPTIONAL
tests| user debug eng  |
sdk | user debug eng | xmpp.auto-presence=true ro.config.nocheckin=yes
user debug |user debug| ro.sercure=1 dalvik.vm.lockprof.threshold=500 ro.allow.mock.location=0ro.debuggable=1 persist.service.adb=1

7.如果MAKECMDGOALS不包含clean,clobber,dataclean,installclean,根据不同的主机平台和处理器品平台,包含进要编译的模块,设置subdirs。
8.通过build/tools/findleaves.py,把subdirs目录下的Android.mk存在subdirs_makefiles。并包含这些文件。如果使用mm命令,只包含当前目录下的Android.mk。
9.根据tags_to_install和is_sdk_build,设置哪些模块需要安装,并存入modules_to_install.
get-tagged-modules

# Given an accept and reject list, find the matching
# set of targets.  If a target has multiple tags and
# any of them are rejected, the target is rejected.
# Reject overrides accept.
# $(1): list of tags to accept
# $(2): list of tags to reject
#TODO(dbort): do $(if $(strip $(1)),$(1),$(ALL_MODULE_TAGS))
#TODO(jbq): as of 20100106 nobody uses the second parameter
define get-tagged-modules
$(filter-out \
    $(call modules-for-tag-list,$(2)), \
        $(call modules-for-tag-list,$(1)))
endef
   Module-installed-files $1  $1一般的是一个短的模块名,比如framework,Browers,返回这个模块的目标文件路径
10.包含:$(BUILD_SYSTEM)/Makefile。主要是定义了一些伪目标。
11.定义modules_to_check

文件路径列表,若模块没有定义LOCAL_DONT_CHECK_MODULE,会把生成目标的规则加入到这个变量,以便在modules_to_install后检查目标是否生成成功,目标不存在的话再次生成目标。

12.定义一些make target
target说明
.PHONY:checkbuilt生成没有定义LOCAL_DONT_CHECK_MODULE的模块并拷贝到系统目录
.PHONY:prebuilt拷贝预遍野的文件(比如用include prebuild.mk编译的)到系统目录
.PHONY: files生成所有目标文件(包括:prebuile,modules-to-install,modules-to-check,INSTALLED_ANDROID_INFO_TXT_TARGET)并拷贝到系统目录。INSTALLED_ANDROID_INFO_TXT_TARGET在build/target/board/Android.mk定义=out/target/product/**/android-info.txt
.PHONY: ramdisk生成ramdisk.img (HOSTOUTEXECUTABLES)/mkbootfs ( H O S T O U T E X E C U T A B L E S ) / m k b o o t f s (PRODUCT_OUT)/root
.PHONY: systemimage生成system.img
.PHONY: userdataimage)生成data.img
.PHONY: \ bootimage生成boot.img (INSTALLEDRAMDISKTARGET) ( I N S T A L L E D R A M D I S K T A R G E T ) (HOST_OUT_EXECUTABLES)/mkbootimg –kernel (PRODUCTOUT)/kernelramdisk ( P R O D U C T O U T ) / k e r n e l – r a m d i s k (PRODUCT_OUT)/ramdisk.img >$(PRODUCT_OUT)/boot.img
.PHONY: recoveryimage生成ramdisk-recovery.img (HOSTOUTEXECUTABLES)/mkbootimgkernel ( H O S T O U T E X E C U T A B L E S ) / m k b o o t i m g − − k e r n e l (PRODUCT_OUT)/kernel –ramdisk (PRODUCTOUT)/ramdiskrecovery.img> ( P R O D U C T O U T ) / r a m d i s k − r e c o v e r y . i m g > (PRODUCT_OUT)/recovery.img
.PHONY: droidcoredroidcore: files systemimage生成整个系统system.img ramdisk.img/boot.img ramdisk-recovery.img recovery.img userdata.img  installed-files.txt
.PHONY: apps_only生成TARGET_BUILD_APPS指定的APPS模块.若TARGET_BUILD_APPS包含all就编译全部APPS模块droid 默认target。ifneq ($(TARGET_BUILD_APPS),) droid: apps_onlyelse   droid:droidcore
.PHONY: sdk生成sdk
.PHONY: clean.PHONY: clobber 删除生成文件
.PHONY: modules显示所有模块名
.PHONY: showcommands显示命令
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值