Android m mm mmm make编译模块_android编译mmm

本文详细介绍了Android中mmm(make modules)命令的使用,包括如何获取顶级目录,处理Android.mk文件,以及不同目录下的不同处理方式。通过mmm,可以编译指定模块,如all_modules,同时支持snod、showcommands、dist等特殊选项。首先,mmm会检查每个目录是否存在Android.mk文件,并根据找到的文件进行相应操作。最后,文章提到了设置环境和选择构建目标的相关命令,如source build/envsetup.sh和lunch。
摘要由CSDN通过智能技术生成
    T=$(gettop)
    local M=$(findmakefile)
    # Remove the path to top as the makefilepath needs to be relative
    local M=`echo $M|sed 's:'$T'/::'`
    if [ ! "$T" ]; then
        echo "Couldn't locate the top of the tree.  Try setting TOP."
    elif [ ! "$M" ]; then
        echo "Couldn't locate a makefile from the current directory."
    else
        ONE_SHOT_MAKEFILE=$M make -C $T all_modules $@
    fi
fi

}


函数mm首先是判断当前目录是否就是Android源码根目录,即当前目录下是否存在一个build/core/envsetup.mk文件和一个Makefile文件。如果是的话,就将命令mm当作是一个普通的make命令来执行。否则的话,就调用函数findmakefile从当前目录开始一直往上寻找是否存在一个Android.mk文件。如果在寻找的过程中,发现了一个Android.mk文件,那么就获得它的绝对路径,并且停止上述寻找过程。  
         由于接下来执行make命令时,我们需要指定的是要编译的Android.mk文件的相对于Android源码根目录路径,因此函数mm需要将刚才找到的Android.mk绝对文件路径M中与Android源码根目录T相同的那部分路径去掉。这是通过sed命令来实现的,也就是将字符串M前面与字符串T相同的子串删掉。


        最后,将找到的Android.mk文件的相对路径设置给环境变量ONE\_SHOT\_MAKE,表示接下来要对它进行编译。另外,函数mm还将make命令目标设置为all\_modules。这是什么意思呢?我们知道,一个Android.mk文件同时可以定义多个模块,因此,all\_modules就表示要对前面指定的Android.mk文件中定义的所有模块进行编译。


**函数mmm的实现如下所示:**



function mmm()
{
T= ( g e t t o p ) i f [ " (gettop) if [ " (gettop)if["T" ]; then
local MAKEFILE=
local MODULES=
local ARGS=
local DIR TO_CHOP
local DASH_ARGS= ( e c h o " (echo " (echo"@" | awk -v RS=" " -v ORS=" " ‘/^-.* / ′ ) l o c a l D I R S = /') local DIRS= /

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值