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. PHP获取当前页面完整的URL

    #测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br> ...

  2. c#为了实现自己的线程池功能(一)

    线程池的技术背景 在面向对象编程中,创建和销毁对象是非常费时间的,由于创建一个对象要获取内存资源或者其他很多其他资源,所以提高服务程序效率的一个手段就是尽可能降低创建和销毁对象的次数.特别是一些非常耗 ...

  3. json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)

    一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...

  4. Oracle安装过程物理内存检查及临时temp空间不足解决办法

    物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB). 预期值 : N/A 实际值 : N/A 错误列表: – 可用物理内存 PRVF-7531 : 无法在节 ...

  5. Cocos2d-x3.0 lua捆绑C++分类

    我知道这个纪录Lua结合整个过程. 原文地址:http://blog.csdn.net/qqmcy/article/details/26099859 准备工作: 1.创一个一个Lua的2dxproje ...

  6. linux、hdfs、hive、hbase经常使用的命令

    linux经常使用命令 pwd 查看当前工作文件夹的绝对路径 cat input.txt 查看input.txt文件的内容 ls 显示当前文件夹下全部的文件及子文件夹 rm recommender-d ...

  7. Caching-缓存架构与源码分析

    Caching-缓存架构与源码分析 首先奉献caching的开源地址[微软源码] 1.工程架构 为了提高程序效率,我们经常将一些不频繁修改,但是使用了还很大的数据进行缓存.尤其是互联网产品,缓存可以说 ...

  8. effective c++ 条款12 copy all parts of an object

    这经常发生在更改代码的时候,当有自己的copy 赋值函数或者copy 构造函数时,编译器就不会维护这两个函数.导致发生遗忘. 可能出现的场景 class Customer { private: std ...

  9. swift 笔记 (十二) —— 下标

    下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...

  10. Linux常见命令整理(一)

    整理一下,以备后用 cd /home 进入/home文件夹 cd .. 返回上一级文件夹  cd ../.. 返回上两级文件夹  cd 进入个人的主文件夹  cd - 返回上次所在的文件夹 pwd 显 ...