深入浅出Android makefile(5)--BUILD_HOST_EXECUTABLE

本文深入探讨Android makefile中BUILD_HOST_EXECUTABLE的使用,揭示其在构建主机可执行文件过程中的步骤和作用。
摘要由CSDN通过智能技术生成

上文我们讲完LOCAL_STATIC_LIBRARIES,下面我们就一步步来梳理下。BUILD_HOST_EXECUTABLE


一、 初识 BUILD_HOST_EXECUTABLE
我们先看BUILD_HOST_EXECUTABLE的定义:
build/core/config.mk:BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
展开即build/core/host_executable.mk

二、  host_executable.mk
我们先看看host_executable.mk文件的注释:
###########################################################
## Standard rules for building an executable file.
##
## Additional inputs from base_rules.make:
## None.
########################################################### 
注释中明确的说明了,这是个编译可执行文件的makefile,附加的输入来源于 base_rules.make

LOCAL_IS_HOST_MODULE := true      
明确指出了LOCAL_IS_HOST_MODULE 为真,我们在做LOCAL_PATH分析时,多次使用到该变量,当时我们是估计它肯定是为真,但是没有找到其具体的定义位置,看来就是此处了。

ifeq ($(strip $(LOCAL_MODULE_CLASS)),)
LOCAL_MODULE_CLASS := EXECUTABLES
endif 
因为模块的初始化部分调用了include $(CLEAR_VARS),所以$(LOCAL_MODULE_CLASS)的值肯定为空,此处为其赋值为EXECUTABLES。此变量也是用在intermediates-dir-for函数中。

ifeq ($(strip $(LOCAL_MODULE_SUFFIX)),)
LOCAL_MODULE_SUFFIX := $(HOST_EXECUTABLE_SUFFIX)
endif 
同理$(LOCAL_MODULE_CLASS)的值肯定为空,因为这里是要编译成可执行文件,linux上可执行文件是没有后缀的,换句话说,在此处 $(HOST_EXECUTABLE_SUFFIX)应该为空,该变量尚未初始化,所以必定为空。

下面又include了一个文件,include $(BUILD_SYSTEM)/binary.mk
但是打开这个文件,好家伙,600多行,怎么分析,不过看来大部分都是一些公共函数的定义。
我们先不管这个文件,继续下面分析。

$(LOCAL_BUILT_MODULE): $(all_objects) $(all_libraries)
     $(transform-host-o-to-executable)
     $(PRIVATE_POST_PROCESS_COMMAND) 
紧 接着定义了一个目标$(LOCAL_BUILT_MODULE),这个目标依赖于$(all_objects)和$(all_libraries),执行 两个操作:$(transform-host-o-to-executable)和 $(PRIVATE_POST_PROCESS_COMMAND)

首 先,我们先猜测下$(LOCAL_BUILT_MODULE)目标的值,因为LOCAL_IS_HOST_MODULE = true、LOCAL_MODULE_CLASS := EXECUTABLES它肯定是要放在out/host/linux-x86/obj/EXECUTABLES目录下,而LOCAL_MODULE = acp,故肯定是在刚才的目录下创建acp_intermediates文件夹,而$(LOCAL_BUILT_MODULE)的值估计就是: out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp 。下面我们就一步步分析下$(LOCAL_BUILT_MODULE)

三、 LOCAL_BUILT_MODULE
根据host_executable.mk文件开始处的注释,我们首先去查看下base_rules.make,我们发现在base_rules.make中有LOCAL_BUILT_MODULE变量的定义:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值