Android.mk文件介绍
2012-10-28 11:49
309 查看
下面是我用cocos2d-x写的一款塔防游戏的demo
在编译到android平台的时候需要自己配置Android.mk文件,下面我就着这实例来介绍一下
首先Android.mk file用来向编译系统描述你的源代码信息的。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。
那什么是Makefile呢?
一般来说,c,c++等首先会将c,cpp等源代码文件编译成中间代码文件,即object file
在unix下面是.o 在windows下面是.obj ,如下图,是我用Cygwin在windows下面将Classes中源代码编译出来的
这个过程就是传说中的编译(compile),接下来的步骤就是链接(link)即将你程序的所有object file合成执行文件。
编译过程主要是代码文件的词法分析和语法分析,检测函数变量等声明是否正确 详解->http://baike.baidu.com/view/69568.htm
链接过程主要是将程序各个模块之间相互应用的部分处理好,使得各个模块之间能够正确的衔接起来。直接点说就主要是链接函数,全局变量等。
而要用的就是职权案编译好的目标中间文件(.o,.obj)
一般情况下都将这些o文件 obj文件打包也就是所谓的“库文件”(library file)
在unix下是 .a
在windows下是.lib
如下图,libdefensecommon.a文件就是将上图中所有.0文件打成的包,而其它.a文件是cocos2d-x引擎自动
为我们打的一些关于图片,网络,xml,声音模块的包
Android.mk可以有多个,我们可以在每一个Android.mk文件中定义一个或者多个模块。
只要正确填写了相应的编译信息,NDK的编译系统会自动为我们处理各种细节问题。
好了,铺垫了一通,现在我们来”实战“一下吧!
我工程中有两个Android.mk文件
根目录下的
和jni目录下的
来看看左边中的Android.mk文件(红色字体为解释)
//注: ‘:=’是赋值的意思;'+='是追加的意思;‘$’表示引用某变量的值。
// 一个Android.mk file首先必须定义好LOCAL_PATH变量。它表示是当前文件的路径。
//在这个例子中, 宏函数‘my-dir’, 由编译系统提供, 用于返回当前路径(即包含Android.mk file文件的目录)。
LOCAL_PATH := $(call my-dir)
//CLEAR_VARS 由编译系统提供(可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为
//CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),指定让GNU
MAKEFILE该脚本为你清除许多 LOCAL_XXX 变量 ( 例如 LOCAL_MODULE , //LOCAL_SRC_FILES
,LOCAL_STATIC_LIBRARIES,等等…)
include $(CLEAR_VARS)
//LOCAL_MODULE 变量必须定义,以标识你在 Android.mk 文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统
//会自动生合适的前缀和后缀,换句话说,一个被命名为'shared'的共享库模块,将会生成'libshared.so'文件。
//注意:如果把库命名为‘libhelloworld’,编译系统将不会添加任何的 lib 前缀,也会生成 libhelloworld.so。
LOCAL_MODULE := cocos_defense_common
LOCAL_MODULE_FILENAME := libdefensecommon
//LOCAL_SRC_FILES 变量必须包含将要编译打包进模块中的 C 或 C++源代码文件。不用
//在这里列出头文件和包含文件,编译系统将会自动找出依赖型的文件,当然对于包含文件,你包含时指定的路径应该正确。
//以下就我程序中所需要编译的cpp
LOCAL_SRC_FILES := \
Classes/tinystr.cpp\
Classes/tinyxml.cpp \
Classes/tinyxmlerror.cpp\
Classes/tinyxmlparser.cpp \
Classes/ArmedButton.cpp \
Classes/AttackWave.cpp\
Classes/BonusItem.cpp \
Classes/Creep.cpp\
Classes/CreepBean.cpp \
Classes/DialogLayer.cpp\
Classes/DTDialogView.cpp \
Classes/MapCenterScene.cpp \
Classes/MapCenterGUILayer.cpp\
Classes/GameHUD.cpp \
Classes/GameMediator.cpp\
Classes/GameScene.cpp \
Classes/HelpScene.cpp\
Classes/LevelData.cpp \
Classes/MainMenuScene.cpp \
Classes/MapData.cpp\
Classes/PathNode.cpp \
Classes/Soldier.cpp\
Classes/SoldiersSettingScene.cpp \
Classes/TileBean.cpp \
Classes/AppDelegate.cpp
//LOCAL_WHOLE_STATIC_LIBRARIES 指定模块所需要载入的完整静态库(这些静态库在链接是不允许链接器删除其中无用的代码)。
//通常这在你想往共享库中增加一个静态库时是非常有用的,共享库就会接受到静态库暴露出的content
//即我的程序中需要用到cocos2d-x已经编译好的 cocos2dx_static cocosdenshion_static cocos_extension_static静态库
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
//定义这个变量用来记录C/C++编译器标志集合,并且会被添加到其他任何以LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的模块的LOCAL_CFLAGS定义中。
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
// 一个BUILD_SHARED_LIBRARY
变量用于编译一个静态库。静态库不会复制到的APK包中,但是能够用于编译共享库
//这将会生成一个名为 lib$(LOCAL_MODULE).a 的文件
即 libdefensecommon.a
include $(BUILD_STATIC_LIBRARY)
在编译到android平台的时候需要自己配置Android.mk文件,下面我就着这实例来介绍一下
首先Android.mk file用来向编译系统描述你的源代码信息的。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。
那什么是Makefile呢?
一般来说,c,c++等首先会将c,cpp等源代码文件编译成中间代码文件,即object file
在unix下面是.o 在windows下面是.obj ,如下图,是我用Cygwin在windows下面将Classes中源代码编译出来的
这个过程就是传说中的编译(compile),接下来的步骤就是链接(link)即将你程序的所有object file合成执行文件。
编译过程主要是代码文件的词法分析和语法分析,检测函数变量等声明是否正确 详解->http://baike.baidu.com/view/69568.htm
链接过程主要是将程序各个模块之间相互应用的部分处理好,使得各个模块之间能够正确的衔接起来。直接点说就主要是链接函数,全局变量等。
而要用的就是职权案编译好的目标中间文件(.o,.obj)
一般情况下都将这些o文件 obj文件打包也就是所谓的“库文件”(library file)
在unix下是 .a
在windows下是.lib
如下图,libdefensecommon.a文件就是将上图中所有.0文件打成的包,而其它.a文件是cocos2d-x引擎自动
为我们打的一些关于图片,网络,xml,声音模块的包
Android.mk可以有多个,我们可以在每一个Android.mk文件中定义一个或者多个模块。
只要正确填写了相应的编译信息,NDK的编译系统会自动为我们处理各种细节问题。
好了,铺垫了一通,现在我们来”实战“一下吧!
我工程中有两个Android.mk文件
根目录下的
和jni目录下的
来看看左边中的Android.mk文件(红色字体为解释)
//注: ‘:=’是赋值的意思;'+='是追加的意思;‘$’表示引用某变量的值。
// 一个Android.mk file首先必须定义好LOCAL_PATH变量。它表示是当前文件的路径。
//在这个例子中, 宏函数‘my-dir’, 由编译系统提供, 用于返回当前路径(即包含Android.mk file文件的目录)。
LOCAL_PATH := $(call my-dir)
//CLEAR_VARS 由编译系统提供(可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为
//CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),指定让GNU
MAKEFILE该脚本为你清除许多 LOCAL_XXX 变量 ( 例如 LOCAL_MODULE , //LOCAL_SRC_FILES
,LOCAL_STATIC_LIBRARIES,等等…)
include $(CLEAR_VARS)
//LOCAL_MODULE 变量必须定义,以标识你在 Android.mk 文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统
//会自动生合适的前缀和后缀,换句话说,一个被命名为'shared'的共享库模块,将会生成'libshared.so'文件。
//注意:如果把库命名为‘libhelloworld’,编译系统将不会添加任何的 lib 前缀,也会生成 libhelloworld.so。
LOCAL_MODULE := cocos_defense_common
LOCAL_MODULE_FILENAME := libdefensecommon
//LOCAL_SRC_FILES 变量必须包含将要编译打包进模块中的 C 或 C++源代码文件。不用
//在这里列出头文件和包含文件,编译系统将会自动找出依赖型的文件,当然对于包含文件,你包含时指定的路径应该正确。
//以下就我程序中所需要编译的cpp
LOCAL_SRC_FILES := \
Classes/tinystr.cpp\
Classes/tinyxml.cpp \
Classes/tinyxmlerror.cpp\
Classes/tinyxmlparser.cpp \
Classes/ArmedButton.cpp \
Classes/AttackWave.cpp\
Classes/BonusItem.cpp \
Classes/Creep.cpp\
Classes/CreepBean.cpp \
Classes/DialogLayer.cpp\
Classes/DTDialogView.cpp \
Classes/MapCenterScene.cpp \
Classes/MapCenterGUILayer.cpp\
Classes/GameHUD.cpp \
Classes/GameMediator.cpp\
Classes/GameScene.cpp \
Classes/HelpScene.cpp\
Classes/LevelData.cpp \
Classes/MainMenuScene.cpp \
Classes/MapData.cpp\
Classes/PathNode.cpp \
Classes/Soldier.cpp\
Classes/SoldiersSettingScene.cpp \
Classes/TileBean.cpp \
Classes/AppDelegate.cpp
//LOCAL_WHOLE_STATIC_LIBRARIES 指定模块所需要载入的完整静态库(这些静态库在链接是不允许链接器删除其中无用的代码)。
//通常这在你想往共享库中增加一个静态库时是非常有用的,共享库就会接受到静态库暴露出的content
//即我的程序中需要用到cocos2d-x已经编译好的 cocos2dx_static cocosdenshion_static cocos_extension_static静态库
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
//定义这个变量用来记录C/C++编译器标志集合,并且会被添加到其他任何以LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的模块的LOCAL_CFLAGS定义中。
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
// 一个BUILD_SHARED_LIBRARY
变量用于编译一个静态库。静态库不会复制到的APK包中,但是能够用于编译共享库
//这将会生成一个名为 lib$(LOCAL_MODULE).a 的文件
即 libdefensecommon.a
include $(BUILD_STATIC_LIBRARY)
相关文章推荐
- android中。makefile和.mk文件简单介绍
- Android.mk文件详解介绍
- Android.mk文件详解介绍
- Android系统编译―Android.mk文件的简单介绍
- Android.mk文件详解介绍
- Android.mk文件详解介绍
- Android.mk文件详解介绍
- Android.mk文件详解介绍
- android.mk文件介绍
- android.mk-编译文件学习(转载)
- 介绍一个android开源文件选择对话框:android-file-dialog
- android.mk指定目标文件路径
- 转载:Android.mk语法介绍
- Android.mk文件语法规范
- 一招一个文件解决ndk编译文件Android.mk配置的所有问题
- Android.mk文件详解(转)
- android的AndroidManifest.xml文件介绍
- Android.mk文件解读
- Android.mk入门到精通(001)——Android.mk 文件语法详解:神文
- Android.mk文件语法详述