公司编译项目的命令为:
make -j8 PROJECT_NAME=*** SUB_PROJECT_NAME=**** BUILD_MYOS=yes1
比原始的编译方法多了几个后面的参数,那我们就分析一下这几个参数是怎么来的吧。
BUILD_MYOS
./build/core/main.mk
#如果BUILD_MYOS为yes,我们执行****
ifeq ($(strip $(BUILD_MYOS)),yes)
****
endif1234
#如果BUILD_MYOS为no,我们执行****
ifeq ($(strip $(BUILD_MYOS)),no)
*****
endif1234
SUB_PROJECT_NAME
Android.mk文件
#如果SUB_PROJECT_NAME不为空,则包含此路径的Android.mk
ifneq ($(strip $(SUB_PROJECT_NAME)),)
include $(LOCAL_PATH)/$(SUB_PROJECT_NAME)/Android.mk
endif1234
*.mk文件
#取SUB_PROJECT_NAME的值
LOCAL_PATH := vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)/SUB_PROJECTS/$(SUB_PROJECT_NAME)
#取SUB_PROJECT_NAME的值
PRODUCT_PROPERTY_OVERRIDES += ro.tinno.operator=$(SUB_PROJECT_NAME)
#如果SUB_PROJECT_NAME为空,则**,如果SUB_PROJECT_NAME不为空,则**
ifeq ($(strip $(SUB_PROJECT_NAME)),)
*****
else
****
endif
# 如果SUB_PROJECT_NAME不为空,则包含对应SUB_PROJECT_NAME目录下的configs.mk,或则包含上一个层级的configs.mk
CFG_FILE := vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)/configs.mk
ifneq ($(strip $(SUB_PROJECT_NAME)),)
CFG_FILE := vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)/SUB_PROJECTS/$(SUB_PROJECT_NAME)/configs.mk
ifeq ($(wildcard $(CFG_FILE)),)
CFG_FILE := vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)/configs.mk
endif
endif
-include $(CFG_FILE)
#如果SUB_PROJECT_NAME不为空,则包含对应SUB_PROJECT_NAME目录下的gms.mk,或则包含默认目录下的gms.mk
GMS_FILE :=vendor/google/products/gms.mk
ifneq ($(strip $(SUB_PROJECT_NAME)),)
GMS_FILE :=vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)/SUB_PROJECTS/$(SUB_PROJECT_NAME)/gms.mk
ifeq ($(wildcard $(GMS_FILE)),)
GMS_FILE :=vendor/tinno/google/products/gms.mk
endif
endif
$(call inherit-product-if-exists, $(GMS_FILE))123456789101112131415161718192021222324252627282930313233
build/core/Makefile
#如果SUB_PROJECT_NAME不为空
ifneq ($(strip $(SUB_PROJECT_NAME)),)
****
endif1234
build/core/main.mk
#如果SUB_PROJECT_NAME不为空,则
ifneq ($(strip $(SUB_PROJECT_NAME)),)
PROPERTY_CINFIGS_SUB_PROJECT_NAME = $(SUB_PROJECT_NAME)
endif1234
PROJECT_NAME
*.mk
#当前目录
LOCAL_PATH := vendor/$(TARGET_PRODUCT)/$(PROJECT_NAME)
#给系统属性赋值
PRODUCT_PROPERTY_OVERRIDES += ro.project=$(PROJECT_NAME)
#如果PROJECT_NAME为test,则***
ifeq ($(strip $(PROJECT_NAME)),test)
***
endif
#如果PROJECT_NAME为test,则***
ifeq ($(PROJECT_NAME),test)
***
endif
#如果PROJECT_NAME对应的目录下的文件不为空,则复制此文件到对应的目录,或者复制默认的文件到对应的目录
NEW_APN_FILES := vendor/$(TARGET_PROJECT)/$(PROJECT_NAME)/etc/apns-conf.xml
ifneq ($(wildcard $(NEW_APN_FILES)),)
PRODUCT_COPY_FILES += $(NEW_APN_FILES):/system/etc/apns-conf.xml
else
PRODUCT_COPY_FILES += $(LOCAL_PATH)/apns-conf.xml:/system/etc/apns-conf.xml
endif
123456789101112131415161718192021222324
./build/core/Makefile
#如果SUB_PROJECT_NAME和PROJECT_NAME结果不相等
ifneq ($(strip $(SUB_PROJECT_NAME)),$(PROJECT_NAME))
****
endif1234
看到这,其实我们基本上已经是非常清楚为什么多了这些参数,说白了就是加了几个变量,然后根据这些变量,来执行对应的操作。没有什么非常玄的东西。
TARGET_PRODUCT
TARGET_PRODUCT值为对应编译项目的选择,就是lunch时选择的项目
TARGET_BUILD_VARIANT
TARGET_BUILD_VARIANT值对应项目的选择编译类型,就是lunch时选择项目的编译类型,如user,userdebug,eng
---------------------
作者:hfreeman2008
来源:CSDN
原文:https://blog.csdn.net/hfreeman2008/article/details/72490894?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!