zoukankan      html  css  js  c++  java
  • 深入浅出Android makefile(1)--初探(转载)

      转载:http://nfer-zhuang.iteye.com/blog/1752368

      

    一、说明
    android build system是一个非常庞大的系统,要编译Android工程、修改或新增Android模块都需要对这个编译系统有一定的了解。但是由于它实在是太庞大了,大家往往是不知道从哪里切入进去,对Android的编译系统进行一个系统的学习。

    下面我们尝试从一个小模块逐步对android build system做一个深入剖析。选择的这个模块名字叫做acp ,源码位于build oolsacp目录。

    后续很多模块的编译都需要使用到acp,根据编译依赖一般会先编译本模块。当然它也需要依赖到其他文件,需要的时候我们再进行阐述。

    二、acp Android.mk初探
    acp的Android.mk比较简单,去掉的无用代码后,如下面所示:

    Makefile代码

        LOCAL_PATH:= $(call my-dir)  
        include $(CLEAR_VARS)  
          
        LOCAL_SRC_FILES := acp.c  
          
        LOCAL_STATIC_LIBRARIES := libhost  
        LOCAL_C_INCLUDES := build/libs/host/include  
        LOCAL_MODULE := acp  
        LOCAL_ACP_UNAVAILABLE := true  
          
        include $(BUILD_HOST_EXECUTABLE)   

    上面的语句大致的意思就是,使用当前路径下的acp.c源码,引用的include和链接的library都是host模块,最终编译生成一个可在当前主机运行的可执行文件,名字为acp(linux环境)。。
    这里我们先不谈每一个变量的具体含义和使用,我们先大概看一下一个Android.mk的基本组成。

    三、 Android.mk基本组成

    1. LOCAL_PATH 定义了当前模块的相对路径,必须出现在所有的编译模块之前
    2. 每个编译模块由include $(CLEAR_VARS) 开始,由include $(BUILD_XXX) 结束
    3. include $(CLEAR_VARS) 是一个编译模块的开始,它会清空除LOCAL_PATH之外的所有LOCA_XXX变量
    4. include $(BUILD_XXX) 描述了编译目标
    5. LOCAL_SRC_FILES 定义了本模块编译使用的源文件,采用的是基于LOCAL_PATH的相对路径
    6. LOCAL_MODULE 定义了本模块的模块名

    编译acp还需要了几个可选的变量:

    • LOCAL_STATIC_LIBRARIES 表示编译本模块时需要链接的静态库
    • LOCAL_C_INCLUDES 表示了本模块需要引用的include文件
    • LOCAL_ACP_UNAVAILABLE 表示是否支持acp,如果支持acp,则使用acp进行拷贝,否则使用linux cp拷贝,本模块编译acp,当然是不支持acp了

    四、编译目标

    上面我们用到include $(CLEAR_VARS)和include $(BUILD_HOST_EXECUTABLE),那么他们是在哪里定义的呢?除了BUILD_HOST_EXECUTABLE还有哪些BUILD_XXX目标呢?
    它们的定义位于build/core/config.mk文件,当然config.mk文件定义的编译目标也很多,下面列举几个常用的目标:
    编译目标 说明
    BUILD_HOST_STATIC_LIBRARY 主机上的静态库
    BUILD_HOST_SHARED_LIBRARY 主机上的动态库
    BUILD_HOST_EXECUTABLE 主机上的可执行文件
    BUILD_STATIC_LIBRARY 目标设备上的静态库
    BUILD_SHARED_LIBRARY
    目标设备上的动态库
    BUILD_EXECUTABLE
    目标设备上的可执行文件
    BUILD_JAVA_LIBRARY JAVA库
    BUILD_STATIC_JAVA_LIBRARY 静态JAVA库
    BUILD_HOST_JAVA_LIBRARY 主机上的JAVA库
    BUILD_PACKAGE APK程序
    具体的每一个目标,等我们遇到的时候我们再详细进行讲解。
  • 相关阅读:
    JQ插件
    jQuery radio的取值与赋值
    Js获取当前日期时间
    jquery 整理之一
    2014-9月收集整理之二(原生)
    Codeforces Round #279 (Div. 2) E-Restoring Increasing Sequence
    HDU-4431 麻将
    hdu-2222 AC自动机模板题
    Codeforces Round #460 (Div. 2) E. Congruence Equation
    Codeforces Round #459 (Div. 2) D. MADMAX
  • 原文地址:https://www.cnblogs.com/lance-ehf/p/4184569.html
Copyright © 2011-2022 走看看