android开发笔记之Makefile(二)

本文深入解析了编译项目中特定参数的作用,如BUILD_MYOS、SUB_PROJECT_NAME和PROJECT_NAME,阐述了它们如何影响编译流程及配置文件的加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司编译项目的命令为:

 

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
来源:优快云
原文:https://blog.youkuaiyun.com/hfreeman2008/article/details/72490894?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值