android mm 到底执行了什么?

android mm 到底执行了什么?
----------------------------------------
author: hjjdebug
date:   2015年 05月 08日 星期五 16:10:39 CST
email:  hejinjing@tom.com
----------------------------------------
付实例介绍, 查看注释可以明白到底发生了什么。
mm()
if [ -f build/core/envsetup.mk -a -f Makefile ]; then
        make $@;
    else
        T=$(gettop);                # 获取顶层目录
        local M=$(findmakefile);    # 获取Android.mk 目录
        local MODULES=;
        local GET_INSTALL_PATH=;
        local ARGS=;
        local M=`echo $M|sed 's:'$T'/::'`;  # 去除顶层目录,成相对路径
        if [ ! "$T" ]; then
            echo "Couldn't locate the top of the tree.  Try setting TOP.";
        else
            if [ ! "$M" ]; then
                echo "Couldn't locate a makefile from the current directory.";
            else
                for ARG in $@;
                do
                    case $ARG in
                        GET-INSTALL-PATH)
                            GET_INSTALL_PATH=$ARG
                        ;;
                    esac;
                done;
                if [ -n "$GET_INSTALL_PATH" ]; then
                    MODULES=;
                    ARGS=GET-INSTALL-PATH;
                else
                    MODULES=all_modules;    #  MODULES 赋值 all_modules
                    ARGS=$@;
                fi;                # 进入顶层目录,指明makefile, 指明目标及参数
                ONE_SHOT_MAKEFILE=$M make -C $T -f build/core/main.mk $MODULES $ARGS;
            fi;
        fi;
    fi
}

经注释, mm 秘密荡然无存。与自己知识融为一体。

另外: ONE_SHOT_MAKEFILE 专为mm 定义,进一步搜索本目录下编译的模块列表,具体看代码。

mmm 命令可以单独指明一个模块名称。这里不详述了。


gettop ()
{
    local TOPFILE=build/core/envsetup.mk;
    if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ]; then   #条件一般不满足,会走下面else
        echo $TOP;
    else
        if [ -f $TOPFILE ]; then
            PWD= /bin/pwd;
        else
            local HERE=$PWD;        # 取到原始目录
            T=;
            while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
                \cd ..;                # 不满足条件,退一级目录
                T=`PWD= /bin/pwd`;    # T 保留当前路径
            done;
            \cd $HERE;                # 重回原始目录
            if [ -f "$T/$TOPFILE" ]; then
                echo $T;            # 打印顶层目录
            fi;
        fi;
    fi
}

例如:
在 ~/myandroid/system/media/camera/src 下执行 gettop, 打印 /home/hjj/myandroid


findmakefile ()
{
    TOPFILE=build/core/envsetup.mk;
    local HERE=$PWD;
    T=;
    while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
        T=`PWD= /bin/pwd`;
        if [ -f "$T/Android.mk" ]; then
            echo $T/Android.mk;            # 找到了Android.mk 就打印,返回
            \cd $HERE;
            return;
        fi;
        \cd ..;                # 未到顶层则退一级
    done;
    \cd $HERE
}

在 ~/myandroid/system/media/camera/src 下执行 gettop, 输出
/home/hjj/myandroid/system/media/camera/src/Android.mk

另外还有一个问题, 我想显示出具体编译的命令,应该怎么做。

找啊找,终于找到你了。 showcommands

例如: mm showcommands

将显示完整编译命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值