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

Android.mk中的经常使用语法的更多相关文章

  1. 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

    看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...

  2. [转]编写Android.mk中的LOCAL_SRC_FILES的终极技巧

    希望看原文的请移步:[原创]编写Android.mk中的LOCAL_SRC_FILES的终极技巧 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的 ...

  3. 编写Android.mk中的LOCAL_SRC_FILES的终极技巧(转)

    转自:http://blog.csdn.net/fu_zk/article/details/12836431 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件, ...

  4. Android.mk中添加宏定义

    在Boardconfig.mk 中添加一个 IS_FLAG := true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在Android.mk 中添加 一个 ...

  5. [转]编写 android.mk 中 LOCAL_C_INCLUDES 的技巧

    看原文请移步:编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录 ...

  6. Android.mk中添加宏定义【转】

    本文转载自:http://blog.csdn.net/huangyabin001/article/details/38302021 在Boardconfig.mk 中添加一个 IS_FLAG := t ...

  7. Android.mk 中常用“LOCAL_” 变量

    编写模块的编译文件,实际就是定义一系列以“LOCAL_”开头的编译变量,因此我们有必要弄明白这些变量的具体含义.下面是一些经常使用的LOCAL_编译变量的说明: 变量名 说明 LOCAL_ASSET_ ...

  8. Android.mk中call all-subdir-makefiles和call all-makefiles-under,$(LOCAL_PATH)的区别(转载)

    转自:http://blog.csdn.net/jackyu613/article/details/5949324 在写Android.mk文件时,call all-subdir-makefiles和 ...

  9. Android.mk中引用第3方动态库

    Android.mk 文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOC ...

随机推荐

  1. hdu 1394 Minimum Inversion Number(线段树之 单点更新求逆序数)

    Minimum Inversion Number                                                                           T ...

  2. Java进阶 创建和销毁对象

    最近准备写点Javase的东西,希望可以帮助大家写出更好的代码. 1.给不可实例化的类提供私有构造器 比如:每个项目中都有很多工具类,提供了很多static类型的方法供大家使用,谁也不希望看到下面的代 ...

  3. DB2 “The transaction log for the database is full” 存在的问题及解决方案

    DB2在执行一个大的insert/update操作的时候报"The transaction log for the database is full.. "错误,查了一下文档是DB ...

  4. gradle下载(转)

    http://services.gradle.org/distributions services.gradle.org/ distributions/ gradle-2.2.1-rc-1-all.z ...

  5. js“分享到”侧边框伸缩实现

    思路: 1,临界值是 -150 和 0 如果大于临界值,就要隐藏 2,隐藏:速度为负 显示:速度为正 3,如果与临界值相等,就清空定时器 否则,就运动 ------------------------ ...

  6. Lua 服务器与客户端实例(转)

    =============================================================== 服务器,main.lua ======================= ...

  7. 于Heroku平台部署maven webapp(java web)工程

    眼下,需要Heroku上述部署java web工程,该项目必须使用maven管理 一:新maven webapp工程 编者pom.xml档,增加下面的配置为例, <project xmlns=& ...

  8. Web静态和动态项目委托代理基于面向方面编程AOP

    本来每天更新,我一般喜欢晚上十二点的时候发文章,结果是不是愚人节?校内网也将是非常有趣,破,把我给打. ..好吧-从今天开始的话题AOP.AOP太重要了,所以把第二篇文章谈论这个话题,AOP它是Spr ...

  9. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第7章节--打包并部署SP2013 Apps 打包并公布App

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第7章节--打包并部署SP2013 Apps 打包并公布App         如今既然你理解了一个app的四个主要部分, ...

  10. 【Java GUI】Java GUI基金会

    AWT和Swing Swing是个AWT改进和扩展. 书写GUI规划.Swing和AWT曾效力.他们共存 Java基础类(JFC)于. 虽然AWT和Swing都提供了构造图形界面元素的类.但它们的虫药 ...