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

时间: 2024-08-24 06:29:32

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

Android.mk中的常用语法

Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的, 今天查了一些常用的的语法. 一 概述: 一个Android.mk文件用来向编译系统描述你的源代码. 具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或更多次的build系统. 你可以在每一个Android.mk文件中定义一个或多个模块, 你也可以在几个模块中使用同一个源代码文件. 二 语法 1 必须定义内容 先看必须定义的内容: LOCAL_PATH := $(call my-d

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

看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_FILES的终极技巧 编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 中提到了一些编译android.mk文件的技巧, 由于都涉及到了shell命令, 导致不能完全在windows下工作, 下面我使用纯净的makefile语法重新编写了脚本 # 配置自己的源文件目录和源文件后

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

转自:http://blog.csdn.net/fu_zk/article/details/12836431 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是LOCAL_SRC_FILES源文件列表.考虑有如下源文件分布的情况: cpp文件全部位于android项目下的jni文件夹下,结构如下 jni |---1.cpp |---2.cpp |---Android.mk |---Application.mk |---ndk_test.cp

Android.mk中LOCAL_MODULE_CLASS对LOCAL_MODULE_PATH 的影响

LOCAL_MODULE_CLASS用于制定LOCAL_MODULE_PATH的路径所在. 如果在Android.mk没有直接明确LOCAL_MODULE_PATH 的话,需要通过以下规则来自动生成base_rules.mk: 154 LOCAL_MODULE_PATH := $(strip $(LOCAL_MODULE_PATH)) 155 ifeq ($(LOCAL_MODULE_PATH),) 156 #LOCAL_MODULE_CLASS := 157 LOCAL_MODULE_PATH

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

看原文请移步:编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录, 一般写成这样 LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes $(LOCAL_PATH)/../../Classes/game $(LOCAL_PATH)/../../Classes/logic $(LOCAL_PATH)/../../Classe

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

Android.mk 文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES:= \ testH264VideoStreamer.cpp LOCAL_MODULE := live555_streamLOCAL_MODULE_CLASS := EXECUTABLESLOCAL_STATIC_LIBRARIES := libcutils libc LOC

makefile 与android.mk中加信息打印

makefile里面加打印: [table]@echo ' zImage - Compressed kernel image' android.mk里面加信息打印: $(warning TEXT......) 这个函数被运行的时候.会输出:TEXT......,可是make会继续运行下去. $(error TEXT......) 这个函数被运行的时候,会输出:TEXT.......而且终止make的运行. 当中"TEXT....."能够替换为对变量的取值来输出变量的信息,比如:$(wa

makefile 与android.mk中加打印信息

[table]@echo ' zImage - Compressed kernel image' android.mk里面加打印信息: $(warning TEXT......) 这个函数被执行的时候,会输出:TEXT......,但是make会继续执行下去. $(error TEXT......) 这个函数被执行的时候,会输出:TEXT......,并且终止make的执行. 其中“TEXT.....”可以替换为对变量的取值来输出变量的信息,例如:$(warning $(VAR)),那么该函数执

android.mk中LOCAL_MODULE_TAGS说明【转】

转自http://blog.csdn.net/evilcode/article/details/6459299 LOCAL_MODULE_TAGS :=user eng tests optional user: 指该模块只在user版本下才编译 eng: 指该模块只在eng版本下才编译 tests: 指该模块只在tests版本下才编译 optional:指该模块在所有版本下都编译 如果两次make之间选了不同的编译模式,则需要运行一下make installclean,确保本次make不会用到上