• Android.mk中的经常使用语法



    Android.mk编译文件是用来向Android NDK描写叙述你的C,C++源码文件的, 今天查了一些经常使用的的语法。


    一 概述:

    一个Android.mk文件用来向编译系统描写叙述你的源码。
    详细来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或很多其它次的build系统。




    你能够在每个Android.mk文件里定义一个或多个模块,
    你也能够在几个模块中使用同一个源码文件。


    二 语法

    1 必须定义内容

    先看必须定义的内容:
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := XXX
    LOCAL_FILES := XXX.cpp
    ...
    include $(BUILD_XXX)
    

    详细含义例如以下:
    LOCAL_PATH := $(call my-dir)
    每一个Android.mk文件必须以定义LOCAL_PATH为開始。它用于在开发tree中查找源文件。


    my-dir是一个有宏函数。有编译系统提供。返回当前路径。即包括Android.mk的文件文件夹。


    include $( CLEAR_VARS)
    CLEAR_VARS变量由编译提供。指向一个GNU Makefile,由它负责清理LOCAL_xxx变量(不清理LOCAL_PATH)。


    由于全部的编译控制文件由同一个GNU Make解析和运行。其变量是全局的,所以清理后才干避免相互影响。




    LOCAL_MODULE := XXX
    LOCAL_MODULE是模块名,必须在include $(BUILD_XXXXX)之前,定义这个变量,唯一且不包括空格。


    LOCAL_SRC_FILES := XXX.cpp
    源文件列表。必须包括将要打包如模块的C/C++ 源代码。


    不必列出头文件,编译系统会自己主动找出依赖头文件。
    缺省的C++源代码的扩展名为.cpp. 也能够改动。通过LOCAL_CPP_EXTENSION。


    include $(XXX)
    负责收集自从上次调用 include $(CLEAR_VARS) 后的全部LOCAL_XXX信息。并决定编译为什么。
    仅仅介绍经常使用的两个:
    BUILD_STATIC_LIBRARY : 编译为静态库,生成一个名为lib$(LOCAL_MODULE).so的文件。
    BUILD_SHARED_LIBRARY :编译为动态库,生成一个名为lib$(LOCAL_MODULE).a的文件。




    2 经常使用的可选内容

    LOCAL_MODULE_FILENAME := XXX
    一般定义在LOCAL_MODULE := XXX之后,用来覆盖LOCAL_MODULE,又一次定义终于生成的目标文件名称。


    LOCAL_CPP_EXTENSION := .cXX
    指出C++ 扩展名。比如:LOCAL_CPP_EXTENSION := .cxx .cpp .cc。




    LOCAL_C_INCLUDES := XXX
    指定包括路径,编译时将会把这些文件夹附上。
    比如:
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
    $(LOCAL_PATH)/../../Classes/SdkController
    $(LOCAL_PATH)/../../Classes/SdkController/android
    $(LOCAL_PATH)/../../Classes/ShareController
    $(LOCAL_PATH)/../../../../../cocos2dx/platform/android/jni


    LOCAL_CFLAGS := XXX, LOCAL_CPPFLAGS := XXX
    用来在编译C/C++时,附加编译选项。
    比如:
    LOCAL_CFLAGS :=
    -Wno-multichar
    -DAndroid
    -DLIBDIR="c"
    -DBUILDING_LIBICONV
    -DIN_LIBRARY


    LOCAL_WHOLE_STATIC_LIBRARIES := XXX
    静态库全链接,编译器会将静态库完整链接而不会进行删减优化。
    不同于LOCAL_STATIC_LIBRARIES,类似于使用--whole-archive。

     
    比如:
    LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static


    import-module: 
    同意寻找并导入其他modules到本Android.mk中来。它会从NDK_MODULE_PATH寻找指定的模块名。  
    $(call import-module,<name>)
    比如:
    $(call import-module,cocos2dx)
    $(call import-module,CocosDenshion/android)
    $(call import-module,scripting/lua/proj.android)


    附录:

    參考博文
    http://www.cnblogs.com/wainiwann/p/3837936.html
    http://www.cnblogs.com/leaven/archive/2011/01/25/1944688.html
  • 相关阅读:
    【C++】深度探索C++对象模型读书笔记--关于对象(Object Lessons)
    【操作系统】调度算法
    【vim】vim常用命令
    【linux】linux的数据流重定向
    以太网帧,IP,TCP,UDP首部结构
    IPv4编址及子网划分
    【计算机网络】计算机网络模型
    【计算机网络】NAT:网络地址转换
    【设计模式】C++中的单例模式
    (转)linux查找技巧: find grep xargs
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5071352.html
Copyright © 2020-2023  润新知