现在的位置: 首页 > 综合 > 正文

Android.mk

2014年02月03日 ⁄ 综合 ⁄ 共 4223字 ⁄ 字号 评论关闭
其它需要注意的事项:
//本次编译需要链接的动态链接库文件,即.so文件 
LOCAL_SHARED_LIBRARIES 
//apk文件名 
LOCAL_PACKAGE_NAME 
include可Android多以这样的形式出现,如:include $( CLEAR_VARS),include $(BUILD_SHARED_LIBRARY).其实这个include可以理解成"执行"的意思,那么执行什么呢?当然是看后边的宏了.
CLEAR_VARS                                             清除LOCAL_xxx变量 
BUILD_SHARED_LIBRARY             在/system/lib/目录下生成lib$(LOCAL_MOUDULE).so文件 
BUILD_STATIC_LIBRARY                         生成lib$(LOCAL_MOUDULE).a文件 
BUILD_EXECUTABLE                               在/system/bin/目录下生成可执行文件 
BUILD_PACKAGE                                      编译成一个apk文件 
//LOCAL_PREBUILT_EXECUTABLES预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用,指定需要复制的可执行文件
LOCAL_PREBUILT_EXECUTABLES
//LOCAL_PREBUILT_LIBS变量是在预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用, 指定需要复制的库.
LOCAL_PREBUILT_LIBS
//LOCAL_REQUIRED_MODULES 指定模块运行所依赖的模块(模块安装时将会同步安装它所依赖的模块)
LOCAL_REQUIRED_MODULES
//LOCAL_JNI_SHARED_LIBRARIES变量主要是用在JNI的编译中,如果你要在你的Java代码中引用JNI中的共享库*.so,此变量就是共享库的名字。那么你要注意的一点是:在你的Project根目录下的Android.mk中要定义此变量用来引用你要使用的JNI中的共享库*.so
LOCAL_JNI_SHARED_LIBRARIES
//定义这个变量用来记录C/C++编译器标志集合,并且会被添加到其他任何以LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的模块的LOCAL_CFLAGS定义中
LOCAL_EXPORT_CFLAGS
新建项目的Android.mk:
//一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
LOCAL_PATH := $(call my-dir)
//LEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),  除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
include $(CLEAR_VARS)
//LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
//如果你把库命名为‘libfoo’,编译系统将不会添加任何的lib前缀,也会生成libfoo.so,这是为了支持来源于Android平台的源代码的Android.mk文件,如果你确实需要这么做的话。
LOCAL_MODULE := cocos2dlua_shared
//这是给上面的LOCAL_MODULE 生成的so文件起名字?
LOCAL_MODULE_FILENAME := libcocos2dlua
//LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。
LOCAL_SRC_FILES := hellolua/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/UpdateScene/UpdateLayer.cpp
//本次编译需要包含的头文件,一个相对于当前目录可选的路径名单,当编译所有的源文件(C,C++和汇编)时,它将被添加进include搜索路径。
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
//静态链接库.
LOCAL_STATIC_LIBRARIES := curl_static_prebuilt
//LOCAL_WHOLE_STATIC_LIBRARIES 指定模块所需要载入的完整静态库(这些静态库在链接是不允许链接器删除其中无用的代码)。通常这在你想往共享库中增加一个静态库时是非常有用的,共享库就会接受到静态库暴露出的content
//这个名字是import里面的LOCAL_MODULE的名字吗?
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
//BUILD_SHARED_LIBRARY是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用'include $(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做。还有BUILD_STATIC_LIBRARY变量生成静态库。
include $(BUILD_SHARED_LIBRARY)
//一个允许你通过名字找到并包含另一个模块的的Android.mk的功能
$(call import-module,cocos2dx)
$(call import-module,CocosDenshion/android)
$(call import-module,scripting/lua/proj.android)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
libcurl的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
//这名字还是没看出来在哪里用到,只是区分吗?
LOCAL_MODULE := cocos_curl_static
//这名字还是没看出来在哪里用到,只是区分吗?
LOCAL_MODULE_FILENAME := curl
//可能要学会这种写法
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libcurl.a
//类似LOCAL_EXPORT_CFLAGS,但是只有C能包含路径,如果"bar.c"想包含一些由"foo"模块提供的头文件的时候这会很有用
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
//表示先build一个静态库
include $(PREBUILT_STATIC_LIBRARY)
---------------------------------------------------------------------------
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
---------------------------------------------------------------------------
用下列代码替换:
---------------------------------------------------------------------------
# 遍历目录及子目录的函数
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
# 遍历Classes目录
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
FILE_LIST := hellocpp/main.cpp
# 从所有文件中提取出所有.cpp文件
FILE_LIST += $(filter %.cpp, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
---------------------------------------------------------------------------
原文网址

抱歉!评论已关闭.