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
Android.mk中的经常使用语法的更多相关文章
- 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES
看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...
- [转]编写Android.mk中的LOCAL_SRC_FILES的终极技巧
希望看原文的请移步:[原创]编写Android.mk中的LOCAL_SRC_FILES的终极技巧 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的 ...
- 编写Android.mk中的LOCAL_SRC_FILES的终极技巧(转)
转自:http://blog.csdn.net/fu_zk/article/details/12836431 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件, ...
- Android.mk中添加宏定义
在Boardconfig.mk 中添加一个 IS_FLAG := true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在Android.mk 中添加 一个 ...
- [转]编写 android.mk 中 LOCAL_C_INCLUDES 的技巧
看原文请移步:编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录 ...
- Android.mk中添加宏定义【转】
本文转载自:http://blog.csdn.net/huangyabin001/article/details/38302021 在Boardconfig.mk 中添加一个 IS_FLAG := t ...
- Android.mk 中常用“LOCAL_” 变量
编写模块的编译文件,实际就是定义一系列以“LOCAL_”开头的编译变量,因此我们有必要弄明白这些变量的具体含义.下面是一些经常使用的LOCAL_编译变量的说明: 变量名 说明 LOCAL_ASSET_ ...
- 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和 ...
- Android.mk中引用第3方动态库
Android.mk 文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOC ...
随机推荐
- Android 权限添加
在AndroidMainFest.xml中加上以下代码就行了 添加WiFi以及访问网络的权限: <uses-permission android:name="android.permi ...
- osgi实战学习之路:3. osgi分层概念及相互合作demo
源码下载 分层: modual: 主要作用于包级管理与共享代码 lifecycle: 主要作用于执行期间的模块管理与訪问osgi底层框架 service: 主要作用于多模块之间的相互通信 demo: ...
- coco2d-x 基于视口的地图设计
<pre name="code" class="plain"> 基于视口的地图设计 DionysosLai 2014-06-14 第三人称游戏,玩家 ...
- 工作经常使用的SQL整理,实战篇(三)
原文:工作经常使用的SQL整理,实战篇(三) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实 ...
- python基础课程_学习笔记15:标准库:有些收藏夹——fileinput
标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...
- 异常Exception in thread "AWT-EventQueue-XX" java.lang.StackOverflowError
今天太背了,bug不断,检查到最后都会发现自己脑残了,粗心写错,更悲剧的是写错的时候还不提示错. 刚才有遇到一个问题,抛了这个异常Exception in thread "AWT-Event ...
- OpenVPN-ng,为移动续航的应用层隧道
VPN,让人觉得它总是做好事的,是逃离监管的途径,其实VPN已经成了逃离监管的唯一代名词.你看,无论是什么技术,IPSec也好,WEB代理也罢,仅仅要是加密了原始信息的技术,都能够叫做VPN,于是乎就 ...
- LayoutInflater使用
在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会依据情况在代码中自己定义控件,这就须要用到LayoutInflater.LayoutInflater在Android中是“扩展”的意思,作 ...
- MFC 将文件拖进对话框获得文件信息
非常多软件都支持直接将文件拖进去进行处理的功能,详细一点如暴风影音,将视频或者音频文件拖进去就会自己主动開始播放,那么这个功能在MFC上面怎么实现的呢?事实上非常easy,过程例如以下: 第一步:将对 ...
- 《炉石传说》建筑设计欣赏(6):卡&在执行数据时,组织能力
上一篇文章我们看到了<炉石传说>核心存储卡的数据,今天,我们不断探索卡&身手. 基本的类 通过之前的分析,卡牌&技能涉及到几个类体系:Entity.Actor.Card.S ...