已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android Make脚本简记原文地址:/u/8866/showart_2389799.html原文作者:Email: Blog 一、1、Build LayersBuild Layers描述的是产品的硬件配置情况,据此make时选择不同的配置和模块。按照从上到下的顺序,Build Layer分成4层。Layer sample NoteArch arm, x86 处理器的种类Board 板子类型的代号Device device配置的类型代号Product 具体产品的代号2、添加应用2.1、一个例子以calculator为例,app代码可以放到packages/apps/目录下边,一个app对应一个目录,此例,pakcages/apps/Calculator/,创建Android.mk,已去除多余的注释行。Java代码1. LOCAL_PATH:=$(callmy-dir)2. include$(CLEAR_VARS)3. LOCAL_MODULE_TAGS:=optional4. LOCAL_STATIC_JAVA_LIBRARIES:=libarity5. LOCAL_SRC_FILES:=$(callall-java-files-under,src)6. LOCAL_SDK_VERSION:=current7. LOCAL_PACKAGE_NAME:=Calculator8. include$(BUILD_PACKAGE)9. include$(CLEAR_VARS)10. LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:=libarity:arity-2.1.2.jar11. include$(BUILD_MULTI_PREBUILT)12. #Usethefolloingincludetomakeourtestapk.13. include$(callall-makefiles-under,$(LOCAL_PATH)Android.mk中需要赋值的几个LOCAL_XXX变量,LOCAL_PATH,调用my-dir(在defination.mk中定义),得到当前路径,即,/ pakcages/apps/Calculator/;LOCAL_MODULE_TAGS,取值范围debug eng tests optional samples shell_ash shell_mksh,注意不能取值user,如果要预装,则应定义core.mk;LOCAL_SRC_FILES,app的所有源码,可以调用all-java-files-under得到,如果是java源码的话;LOCAL_PACKAGE_NAME,package的名字,这个名字在脚本中将标识这个app或package;$(CLEAR_VARS)指的是clear_vars.mk,脚本会清空所有LOCAL_xxx的变量,不影响后面这些变量的使用;$(BUILD_PACKAGE)指的是package.mk而,最后一句all-makefiles-under将会包含当前目录下所有的.mk脚本文件。2.2、LOCAL_XXX的列表LOCAL_PATH,当前路径,必须定义;LOCAL_PACKAGE_NAME,必须定义,package的名字,这个名字在脚本中将标识app或package;LOCAL_MODULE_SUFFIX,不用定义,module的后缀,=.apk。LOCAL_MODULE,不用定义,=$(LOCAL_PACKAGE_NAME)。LOCAL_JAVA_RESOURCE_DIRS,不用定义。LOCAL_JAVA_RESOURCE_FILES,不用定义。LOCAL_MODULE_CLASS,不用定义。LOCAL_MODULE_TAGS,可选定义。默认optional。取值范围user debug eng tests optional samples shell_ash shell_mkshLOCAL_ASSET_DIR,可选定义,推荐不定义。默认$(LOCAL_PATH)/assetsLOCAL_RESOURCE_DIR,可选定义,推荐不定义。默认product package和device package相应的res路径和$(LOCAL_PATH)/res。LOCAL_PROGUARD_ENABLED,可选定义,默认为full,如果是user或userdebug。取值full, disabled, custom。full_android_manifest,不用定义,=$(LOCAL_PATH)/AndroidManifest.xml。LOCAL_EXPORT_PACKAGE_RESOURCES,可选定义,默认null。如果允许app的资源被其它模块使用,则设置true。LOCAL_CERTIFICATE,可选定义,默认为testkey。最终是:private_key := $(LOCAL_CERTIFICATE).pk8 和 certificate := $(LOCAL_CERTIFICATE).x509.pem;2.3、mm创建apk时的package.mk中变量分析以Calculator为例,由LOCAL_PATH,LOCAL_PACKAGE_NAME导出变量LOCAL_MODULE,all_assets,all_assets,all_resources。设置LOCAL_MODULE_CLASS=APPS,此值local-intermediates-dir会用到。设置中间生成目录路径,中间路径将放置R.stamp文件。package_expected_intermediates_COMMON := $(call local-intermediates-dir,COMMON)这里COMMON是null,而LOCAL_MODULE_CLASS=APPS,所以package_expected_intermediates_COMMON=out/target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates即package_expected_intermediates_COMMON=out/target/common/obj/APPS/Calculator_intermediates设置LOCAL_BUILT_MODULE_STEM := package.apk而LOCAL_BUILT_MODULE := $(built_module_path)/$(LOCAL_BUILT_MODULE_STEM) base_rules.mkbuilt_module_path := $(intermediates) base_rules.mkintermediates := $(call local-intermediates-dir) java.mk最终LOCAL_BUILT_MODULE=out/target/product/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates/$(LOCAL_BUILT_MODULE_STEM)即LOCAL_BUILT_MODULE=out/target/product/generic/obj/APPS/Calculator_intermediates/package.apk由LOCAL_CERTIFICATE导出private_key := $(SRC_TARGET_DIR)/product/security/$(LOCAL_CERTIFICATE).pk8certificate := $(SRC_TARGET_DIR)/product/security/$(LOCAL_CERTIFICATE).x509.pemLOCAL_CERTIFICATE默认为testkey。2.4、package.mk中定义的几个PACKAGE.xxx变量PACKAGES.$(LOCAL_PACKAGE_NAME).PRIVATE_KEY := $(private_key)PACKAGES.$(LOCAL_PACKAGE_NAME).CERTIFICATE := $(certificate)PACKAGES.$(LOCAL_PACKAGE_NAME).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)PACKAGES.$(LOCAL_PACKAGE_NAME).RESOURCE_FILES := $(all_resources)PACKAGES := $(PACKAGES) $(LOCAL_PACKAGE_NAME)全编译时,PACKAGES变量将会记录遍历到的packages。二、1、java.mk分析选取APPS场景,以Calculator为例说明。LOCAL_JAVA_LIBRARIES=true时,Android.mk中不能定义LOCAL_SDK_VERSION。当LOCAL_SDK_VERSION=current时,LOCAL_JAVA_LIBRARIES=android_stubs_current。package.mk中定义LOCAL_BUILT_MODULE_STEM=package.apk。两个中间目录的路径,即对应的obj目录下APPS/_intermediates/。intermediates=out/target/product/generic/obj/APPS/Calculator_intermediatesintermediates.COMMON=out/target/common/obj/APPS/Calculator_intermediatesLOCAL_INTERMEDIATE_TARGETS先前package.mk中已经定义了R.stamp,java.mk有增添了7个。LOCAL_INTERMEDIATE_TARGETS += $(full_classes_jar) $(full_classes_compiled_jar) $(full_classes_emma_jar) $(full_classes_full_names_jar) $(full_classes_stubs_jar) $(full_classes_jarjar_jar) $(built_dex)此例中,具体值是LOCAL_INTERMEDIATE_TARGETS= out/target/common/obj/APPS/Calculator_intermediates/src/R.stamp defined in package.mk out/target/common/obj/APPS/Calculator_intermediates/classes.jar full_classes_jar out/target/common/obj/APPS/Calculator_intermediates/classes-full-debug.jar full_classes_compiled_jar out/target/common/obj/APPS/Calculator_intermediates/emma_out/lib/classes-full-debug.jar full_classes_emma_jar out/target/common/obj/APPS/Calculator_intermediates/classes-full-names.jar full_classes_full_names_jar out/target/common/obj/APPS/Calculator_intermediates/stubs.jar full_classes_stubs_jar out/target/common/obj/APPS/Calculator_intermediates/classes-jarjar.jar full_classes_jarjar_jar out/target/common/obj/APPS/Calculator_intermediates/classes.dex built_dexjava.mk随后include base_rules.mk后面处理了EMMA,PROGUARD在enable/disable情况下的动作最后定义的target, $(LOCAL_MODULE)-findbugs因为prebuilt/common下还没有findbugs,目前不可用。java.mk还定义了几个特别的变量,ALL_MODULES.$(LOCAL_MODULE).PROGUARD_ENABLED:=$(LOCAL_PROGUARD_ENABLED)ALL_MODULES.$(LOCAL_MODULE).CHECKED := $(full_classes_compiled_jar)ALL_MODULES.$(LOCAL_MODULE).STUBS := $(full_classes_stubs_jar)2、base_rules.mk的分析续1(Java.mk)的场景。提取变量my_prefix:=TARGET_LOCAL_MODULE_TAGS在Android.mk或package.mk中已经设定,默认是optional。确认LOCAL_MODULE_PATH,默认$($(my_prefix)OUT$(use_data)_$(LOCAL_MODULE_CLASS),此例中是out/target/product/generic/system/app设定module_id := MODULE.$(TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE),此例MODULE.TARGET.APPS.Calculator。设定中间目录路径intermediates,intermediates.COMMON,参见1.设定LOCAL_MODULE_STEM=$(LOCAL_MODULE),此例,Calculator。LOCAL_INSTALLED_MODULE_STEMCalculator.apk。LOCAL_INTERMEDIATE_TARGETS追加上package.apk,参见1.处理aidl,转为java,放在intermediates.COMMON下的目录中。处理logtag,转为java,放在intermediates.COMMON下的目录中。确定java_sources,这包括android.mk中包含的,aidl和logtag生成的。处理java_resource_files处理了java lib相关定义clean-$(LOCAL_MODULE) target, 可以删除app/package的生成文件,包括$(PRIVATE_CLEAN_FILES),$(LOCAL_BUILT_MODULE),$(LOCAL_INSTALLED_MODULE),$(intermediates),$(intermediates.COMMON)还定义了$(LOCAL_MODULE) target, 几个变量的值LOCAL_MODULE=CalculatorLOCAL_BUILT_MODULE=out/target/product/generic/obj/APPS/Calculator_intermediates/package.apkLOCAL_INSTALLED_MODULE=out/target/product/generic/system/app/Calculator.apk最后定义了几个ALL_MODULES变量。ALL_MODULES.$(LOCAL_MODULE).CLASSALL_MODULES.$(LOCAL_MODULE).PATHALL_MODULES.$(LOCAL_MODULE).TAGSALL_MODULES.$(LOCAL_MODULE).CHECKEDALL_MODULES.$(LOCAL_MODULE).BUILTALL_MODULES.$(LOCAL_MODULE).INSTALLEDALL_MODULES.$(LOCAL_MODULE).REQUIREDALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS3、multi_prebuilt.mk的分析续1的场景。mulit_prebuilt.mk顾名思义就是多次调用prebuilt.mk,对几种明确的prebuilt library完成需要的copy操作。multi_prebuilt.mk定义了命令auto-prebuilt-boilerplate。入口有6个参数# $(1): file list, :# $(2): IS_HOST_MODULE# $(3): MODULE_CLASS# $(4): OVERRIDE_BUILT_MODULE_PATH# $(5): UNINSTALLABLE_MODULE# $(6): BUILT_MODULE_STEM根据这6个参数,命令确定LOCAL_IS_HOST_MODULELOCAL_MODULE_CLASSOVERRIDE_BUILT_MODULE_PATHLOCAL_UNINSTALLABLE_MODULELOCAL_MODULELOCAL_SRC_FILESLOCAL_BUILT_MODULE_STEMLOCAL_MODULE_SUFFIX并调用prebuilt.mkmulti_prebuilt.mk中分别对下面5中lib调用了auto-prebuilt-boilerplate。prebuilt_static_libs := $(filter %.a,$(LOCAL_PREBUILT_LIBS)prebuilt_shared_libs := $(filter-out %.a,$(LOCAL_PREBUILT_LIBS)prebuilt_executables := $(LOCAL_PREBUILT_EXECUTABLES)prebuilt_java_libraries := $(LOCAL_PREBUILT_JAVA_LIBRARIES)prebuilt_static_java_libraries := $(LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES)4、prebuilt.mk的分析续1的场景。首先,include base_rules.mk定义PACKAGES.$(LOCAL_MODULE).OVERRIDES第二步,如果是APPS类型,则zipalign,并拷贝到中间路径$(intermediates)。不是APPS,则不做zipalign。本例是JAVA_LIBRARY类型,目的路径out/target/common/obj/JAVA_LIBRARIES/libarity_intermediates/javalib.jar,注意其中的libarity和javalib.jar。最后检查 signed情况。三、1.findleaves.py的分析main.mk中调用了findleaves.py,得到所有子目录下Android.mk文件的路径。subdir_makefiles := $(shell build/tools/findleaves.py -prune=out -prune=.repo -prune=.git $(subdirs) Android.mk)$(subdirs)一般编译中取值$(TOP)。使用方法,Usage: %(progName)s Options: -mindepth= Both behave in the same way as their find(1) equivalents. -prune= Avoids returning results from inside any directory called (e.g., */out/*). May be used multiple times.程序首先依次选取dirlist中的目录,然后遍历所有子目录查找Android.mk文件,如果有,则加入到返回列表中。2. pathmap.mk的分析pathmap.mk中定义了一个列表pathmap_INCL,列表中每项是短名:路径对。命令include-path-for使用这个pathmap_INCL列表,输入短名,得到路径。你可以在这个列表中添加自己的对。使用$(call include-path-for, )就可以得到路径。另外,定义了FRAMEWORKS_BASE_JAVA_SRC_DIRS,含有frameworks/base目录下含java文件的所有目录。3. config.mk的分析首先,包含pathmap.mk, 其次,定义了一些变量,例如通用的编译参数,package的后缀名等。随后包含buildspec.mk。接着包含envsetup.mk。然后包含$(board_config_mk)。$(board_config_mk)是位于build/target/board/$(TARGET_DEVICE)/,device/*/$(TARGET_DEVICE)/,或vendor/*/$(TARGET_DEVICE)/目录下的BoardConfig.mk文件。-TODO4. buildspec.mk的分析buildspec.mk是用户应当配置的脚本文件,模板可以使用buildspec.mk.default,放到$(TOP)下。在buildspec.mk中,用户应该配置好主要的参数,例如 TARGET_PRODUCT, TARGET_BUILD_VARIANT, CUSTOM_MODULES, TARGET_SIMULATOR, TARGET_BUILD_TYPE, CUSTOM_LOCALES, 和BUILD_ENV_SEQUENCE_NUMBER等。如果不使用buildspec.mk配置参数,也可以使用环境变量的形式。若不配置参数,那么android会使用默认的参数。5. envsetup.mk的分析首先包含进version_defaults.mk,定义好一些版本相关的变量。参见version_defaults.mk。定义CORRECT_BUILD_ENV_SEQUENCE_NUMBER,这个数字用于buildspec.mk更新时的提醒,应该同buildspec.mk中的或环境变量中的BUILD_ENV_SEQUENCE_NUMBER相等。一般不用关注。随后检查TARGET_PRODUCT,若为空,则置generic。TARGET_PRODUCT应当在buildspec.mk或环境变量中已经定义好。再检查TARGET_BUILD_VARIANT,若为空,则置eng。TARGET_BUILD_VARIANT应当在buildspec.mk或环境变量中已经定义好。然后包含进product_config.mk。接着,检查$(TARGET_BUILD_VARIANT),取值范围是eng user userdebug tests。随后判定HOST_OS(linux),HOST_ARCH(x86)接着,确定TARGET_ARCH和TARGET_OS,若没有定义,则取默认值。TARGET_ARCH := armTARGET_OS := linux接着,确定TARGET_BUILD_TYPE,若没有定义,则取默认值。TARGET_BUILD_TYPE := release接着,确定OUT_DIR。OUT_DIR是存放中间文件和最终结果的地方。若没有定义,则取默认值。OUT_DIR := $(TOPDIR)out随后,定义了一些列的路径变量DEBUG_OUT_DIR,TARGET_OUT_ROOT_release,TARGET_OUT_ROOT_debug,TARGET_OUT_ROOT,BUILD_OUT,PRODUCT_OUT,TARGET_COMMON_OUT_ROOT,等等。6、version_defaults.mk的分析version_defaults.mk是检查一些跟版本相关的变量是否定义,如果未定义,则使用默认值。这些变量包括PLATFORM_VERSION,默认AOSPPLATFORM_SDK_VERSION,默认8PLATFORM_VERSION_CODENAME,默认AOSPDEFAULT_APP_TARGET_SDK,默认AOSPBUILD_ID,默认UNKNOWNBUILD_NUMBER,默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。7. build_id.mk的分析用户可以在build_id.mk中定义这样几个参数,PLATFORM_VERSIONPLATFORM_SDK_VERSIONPLATFORM_VERSION_CODENAMEDEFAULT_APP_TARGET_SDKBUILD_IDBUILD_NUMBER这些参数最终将出现p中。Froyo的build_id.mk中定义了2个变量,BUILD_ID,通常用于说明分支branch的,默认的是OPENMASTER,用户应该配置这个参数。DISPLAY_BUILD_NUMBER,在TARGET_BUILD_VARIANT=user的版本中,p中是ro.build.id是显示成$(BUILD_ID).$(BUILD_NUMBER),还是显示成$(BUILD_ID)形式。设成true,则显示前者。8. product_config.mk的分析make PRODUCT- 如果使用上述形式的make命令,那么将等同于TARGET_PRODUCT:=TARGET_BUILD_VARIANT:=goal_name:=PRODUCT-MAKECMDGOALS:=droid .PHONY: $(goal_name)$(goal_name): $(MAKECMDGOALS)endif注意,goal的取值范围是user userdebug eng tests,如果不属于上述范围,则将算入MAKECMDGOALS中,此时, TARGET_BUILD_VARIANT := eng。例如make PRODUCT-dream-installclean等同于TARGET_PRODUCT=dream make installclean使用make PRODUCT-这种形式,可以方便的指定TARGET_PRODUCT,和TARGET_BUILD_VARIANT。make APP- 如果使用上述形式的make命令,那么将等同于TARGET_BUILD_APPS:=unbundled_goals:=APP-MAKECMDGOALS:=droid .PHONY: $(unbundled_goals)$(unbundled_goals): $(MAKECMDGOALS)使用make APP-这种形式,可以方便的指定TARGET_BUILD_APPS。注意,PRODUCT-和APP-可以一块使用。处理完PRODUCT-和APP-,product_config.mk会包含下面3个文件node_fns.mkproduct.mkdevice.mk上面的3个mk文件定义了一些命令,用于搜寻product, device对应的目录,生成相应的PRODUCT.XXX,和DEVICE.XXX变量。接着,使用$(call import-products, $(get-all-product-makefiles)遍历Prodcut相关的AndroidProducts.mk文件,读入PRODCUTS.xxx变量。可以去掉文件中下面两句话的注释符,查看。#$(dump-products)#$(error done)随后,使用PRODCUT.xxx和TARGET_PRODUCT,得到INTERNAL_PRODUCT信息,即指定product的路径。再由INTERNAL_PRODUCT得到TARGET_DEVICE, PRODUCT_LOCALES, PRODUCT_BRAND, PRODUCT_MODEL, PRODUCT_MANUFACTURER, PRODUCT_DEFAULT_WIFI_CHANNELS, PRODUCT_POLICY, PRODUCT_COPY_FILES, PRODUCT_PROPERTY_OVERRIDES, PRODUCT_PACKAGE_OVERLAYS, DEVICE_PACKAGE_OVERLAYS, PRODUCT_TAGS, PRODUCT_OTA_PUBLIC_KEYS。由PRODUCT_LOCALES导出PRODUCT_AAPT_CONFIG。ADDITIONAL_BUILD_PROPERTIES中追加PRODUCT_PROPERTY_OVERRIDES中的值。上面所说的这些值,实际上都是在product的mk文件中定义。9. node_fns.mk的分析定义了一些命令。这些命令在product.mk,device.mk,和product_config.mk中会使用。这里重点说明import-nodes。import-nodes需要3个入口参数:$(1)是一个字串,是输出变量的主干名。例如”PRODUCTS和”DEVICES“。$(2)是一个makefile文件列表,这些文件中应该含有对$(3)中变量的定义。$(3)是一个变量列表。import-nodes会创建这样形式的变量,以$(1)=PRODUCTS, $(2)中含有build/target/product/core.mk, $(3)中含有PRODUCT_NAME, 而且core.mk中定义了PRODUCT_NAME:=core为例,PRODUCT.build/target/product/core.mk.PRODUCT_NAME:=coreimport-nodes中还考虑了inherit的问题,如果某个PRODUCTS.XXX变量的值中有inherit:标识后面跟着mk文件名的字串,则会把那个mk文件中相应的变量的属性添加到PRODUCTS.XXX中。inherit:是inherit-product命令添加的。参见product.mk。在product_config.mk中会说明$(2)中的mk文件列表是AndroidProducts.mk中的PRODUCT_MAKEFILES定义的。node_fns.mk的代码真的很杀伤脑细胞.10. product.mk的分析product.mk构造了一些命令,供product_config.mk中使用。_find-android-products-files这个命令会得到device/和vendor/, 包括子目录,以及build/target/product/下的AndroidProducts.mk文件列表。get-all-product-makefiles这个命令会得到所有$(_find-android-products-files)的AndroidProducts.mk文件中PRODUCT_MAKEFILES变量定义的mk文件。_product_var_list对应的是import-nodes命令的$(3), 定义了会生成那些PRODUCT属性名的变量。这些变量实际也是在product的mk文件中要考虑定义的。_product_var_list := PRODUCT_NAME PRODUCT_MODEL PRODUCT_LOCALES PRODUCT_PACKAGES PRODUCT_DEVICE PRODUCT_MANUFACTURER PRODUCT_BRAND PRODUCT_PROPERTY_OVERRIDES PRODUCT_COPY_FILES PRODUCT_OTA_PUBLIC_KEYS PRODUCT_POLICY PRODUCT_PACKAGE_OVERLAYS DEVICE_PACKAGE_OVERLAYS PRODUCT_CONTRIBUTORS_FILE PRODUCT_TAGS PRODUCT_SDK_ADDON_NAME PRODUCT_SDK_ADDON_COPY_FILES PRODUCT_SDK_ADDON_COPY_MODULES PRODUCT_SDK_ADDON_DOC_MODULE PRODUCT_DEFAULT_WIFI_CHANNELSimport-products会调用duct_config.mk中用到。define import-products$(call import-nodes,PRODUCTS,$(1),$(_product_var_list)endefinherit-product命令则将在所有的PRODUCT.xxx变量值中后缀上inherit:,当import-nodes处理时,会替换成继承的属性。check-all-products命令借助$(PRODUCTS)诸变量,会对product进行唯一性检查和PRODUCT_NAME,PRODUCT_BRAND,PRODCUT_COPY_FILES的简单检查。resolve-short-product-name命令,给定Product的短名,返回对应mk的路径。11. device.mk的分析同product.mk类似,device.mk构造了一些命令。有resolve-short-device-name,和import-devices。四、1. config.mk的分析首先,包含pathmap.mk, 其次,定义了一些变量,例如通用的编译参数,package的后缀名等。随后包含buildspec.mk。接着包含envsetup.mk。envsetup.mk中会遍历所有product相关的路径,载入所有支持的product的信息到变量集PRODUCT.中,一个product对应一个。最后根据TARGET_PRODUCT的值,定义各种跟product相关的变量,包括TARGET_DEVICE变量。然后包含$(board_config_mk)。$(board_config_mk)是位于build/target/board/$(TARGET_DEVICE)/,device/*/$(TARGET_DEVICE)/,或vendor/*/$(TARGET_DEVICE)/目录下的BoardConfig.mk文件。 $(TARGET_DEVICE)已经在product_config.mk中定义了。在包含$(board_config_mk)之前,会做检查,多个$(board_config_mk)存在则报错。定义TARGET_DEVICE_DIR,TARGET_BOOTLOADER_BOARD_NAME,TARGET_CPU_ABI等跟board相关的变量。接着,依次以HOST_和TARGET_条件包含select.mk。这里说明TARGET_的select.mk。先定义combo_os_arch,通常是linux-arm,然后定义各种跟编译链接相关的一些变量,最后再包含进build/core/combo/TARGET_linux-arm.mk。再包含javac.mk,定义javac的命令和通用参数。随后,定义一些变量,指向通用工具,其中一些是os提供的,例如YACC;一些是froyo编译生成,放在out/host/linux-x86/bin/下,一些是预定义的脚本和工具,例如MKTARBALL。最后定义了一些编译链接变量,这里专门列出,HOST_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)HOST_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)HOST_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)HOST_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)HOST_GLOBAL_LD_DIRS += -L$(HOST_OUT_INTERMEDIATE_LIBRARIES)TARGET_GLOBAL_LD_DIRS += -L$(TARGET_OUT_INTERMEDIATE_LIBRARIES)HOST_PROJECT_INCLUDES:= $(SRC_HEADERS) $(SRC_HOST_HEADERS) $(HOST_OUT_HEADERS)TARGET_PROJECT_INCLUDES:= $(SRC_HEADERS) $(TARGET_OUT_HEADERS)ifneq ($(TARGET_SIMULATOR),true)TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)TARGET_GLOBAL_CPPFLAGS += $(TARGET_ERROR_FLAGS)endifHOST_GLOBAL_CFLAGS += $(HOST_RELEASE_CFLAGS)HOST_GLOBAL_CPPFLAGS += $(HOST_RELEASE_CPPFLAGS)TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS)TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)其中的TARGET_PROJECT_INCLUDES包含了SRC_HEADERS,添加头文件路径的话,可以改动SRC_HEADERS。最后包含进dumpvar.mk2. javac.mk的分析javac.mk中会定义javac的编译命令和通用参数。CUSTOM_JAVA_COMPILER做为javac.mk的入口参数,可以考虑openjdk,eclipse。不定义时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙纠纷诉状范文
- 北师大版一年级下册语文教案
- 河道清洁维护工程合同
- 机场入口岗亭施工合同
- 屋面绿化施工共享合同
- 六年级信息技术上册教案
- 餐饮业食品安全操作指引
- 企业文化建设行政人事部行动
- 建筑工程招投标流程选择题
- 汽车维修用章质量保证
- 丝网印刷知识
- 【ppt】初中学习方法
- 日用陶瓷项目企划书(模板参考)
- 古诗接龙100首
- 天津民众体检中心——教你看懂体检报告ppt课件
- 史上最全的自驾游完全手册
- NB_T 10527-2021 煤矿立井井壁注浆施工规范_(高清最新)
- 执行力培训PPT
- GB 6944-2012 危险货物分类和品名编号(高清版)
- 住建系统消防安全专项整治工作方案
- 阀门安装使用说明书【精选文档】
评论
0/150
提交评论