Makefile & Android.mk文件中如何输出打印信息

在makefile中打印输出信息的方法是:$(warning xxxxx)或者$(error xxxxx)

输出变量方式为:$(warning  $(XXX))

Android编译顺序小结

android编译:
1、build.sh脚本:
该脚本根据传进来的参数选择编译的项目:
例如./build.sh XXX systemimage
因为$1=P729B_CN则会进入if语句中。
if [ “$1” = “XXX” ] ]; then
    source ./$1/customize.sh//执行定制目录拷贝脚本
    ./build_blade.sh update-api//生成current.xml文件,更新api。
    ./build_blade.sh $2 //根据传进来的第二个参数systemimage来编译版本。既:./build_mooncake.sh systemimage
fi

2、build_XXX.sh脚本
通过上面我们可以看到,版本的编译进入了./build_XXX.sh systemimage命令的执行。在这个脚本中:
source build/envsetup.sh > /dev/null  ///设置环境变量
choosecombo Device releaseXXXeng //选择设备
make -j4  $1  //进行编译。这里相当于make -j4 systemimage 当然这里的-j4根据自己的机器配置来选择编译的级别。

其中source build/envsetup.sh > /dev/null 设置环境变量,也是作为mm的一个解析器;
    choosecombo Device release XXX eng  这条中的choosecombo是Google自带的一个函数,实际上在这里他调用的其他几个文件:
    choosesim $1       选择目标设备
    choosetype $2      选择目标代码格式
    chooseproduct $3   选择产品平台(mooncake)
    choosevariant $4   选择版本的模式
    set_stuff_for_environment  通过build/core/config.mk进行配置
    printconfig        打印出我们刚才选择的信息

我们执行这条命令的时候,会直接打印出
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=XXX

TARGET_BUILD_VARIANT=user
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ERE27
============================================
而我们没有选择的余地,如果想自己diy版本,则可以直接执行choosecombo可以进行手动选择。

而我们在单独执行choosesim $1 ,在下面的函数中,我们看到,每次执行一次choosesim $1便会做一次set_stuff_for_environment
case `uname -s` in
    Linux)
        function choosesim()
        {
            echo “Build for the simulator or the device?”
            echo ”     1. Device”
            echo ”     2. Simulator”
            echo

            export TARGET_SIMULATOR=
            local ANSWER
            while [ -z $TARGET_SIMULATOR ]
            do
                echo -n “Which would you like? [1] “
                if [ -z “$1” ] ; then
                    read ANSWER
                else
                    echo $1
                    ANSWER=$1
                fi
                case $ANSWER in
                “”)
                    export TARGET_SIMULATOR=false
                    ;;
                1)
                    export TARGET_SIMULATOR=false
                    ;;
                Device)
                    export TARGET_SIMULATOR=false
                    ;;
                2)
                    export TARGET_SIMULATOR=true
                    ;;
                Simulator)
                    export TARGET_SIMULATOR=true
                    ;;
                *)
                    echo
                    echo “I didn’t understand your response.  Please try again.”
                    echo
                    ;;
                esac
                if [ -n “$1” ] ; then
                    break
                fi
            done