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 := XXXLOCAL_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

转载于:https://my.oschina.net/zhangjie830621/blog/343976

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值