Introduction:
android.mk文件详解" title="[转载]cocos2dx
一、概述
android.mk文件详解" title="[转载]cocos2dx
jni/hellojni.c
jni/AndroID.mk
android.mk文件详解" title="[转载]cocos2dx
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODulE:= hellojni
LOCAL_SRC_fileS := hellojni.c
include $(BUILD_SHARED_liBRARY)
好,我们来解释一下这几行代码:
include $( CLEAR_VARS)
LOCAL_MODulE := hellojni
LOCAL_MODulE变量必须定义,以标识你在 AndroID.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'hellojni'的共享库模块,将会生成'libhellojni.so'文件。
LOCAL_SRC_fileS := hellojni.c
include $(BUILD_SHARED_liBRARY)
二、参考
-以LOCAL_开头的名字(例如 LOCAL_MODulE)
-以PRIVATE_,NDK_ or APP_开头的名字(内 部使用)
-小写名字(内部使用,例如’my-dir’)
MY_SOURCES := foo.c
ifneq ($(MY_CONfig_bar),)
MY_SOURCES += bar.c
endif
LOCAL_SRC_fileS += $(MY_SOURCES)
1. GNU Make 变量
(1) CLEAR_VARS: 指向一个编译脚本,几乎所有未定义的LOCAL_XXX变量都在"Module-description"节中列出。你必须在开始一个新模块之前包含这个脚本。include $(CLEAR_VARS)
(2) BUILD_SHARED_liBRARY: 指向编译脚本,收集所有的你在LOCAL_XXX变量中提供的信息,并且决定如何把你列出的源代码文件编译成一个共享库。注意,你必须至少在包含这个文件之前定义LOCAL_MODulE和LOCAL_SRC_fileS,使用例子:
include $(BUILD_SHARED_liBRARY) (注意这将生成一个名为lib$(LOCAL_MODulE).so的文件)
(3) BUILD_STATIC_liBRARY: 一个BUILD_SHARED_liBRARY变量用于编译一个静态库。静态库不会复制到你的project/packages中,但是能够用于编译共享库,(看下面描述的LOCAL_STATIC_liBRARIES and LOCAL_STATIC_WHolE_liBRARIES)
使用例子:include $(BUILD_STATIC_liBRARY) (注意,这将会生成一个名为lib$(LOCAL_MODulE).a的文件)。
(4) TARGET_ARCH: 目标cpu平台的名字,和androID开放源码中指定的那样。如果是arm,表示要生成ARM兼容的指令,与cpu架构的修订版无关。
(5) TARGET_PLATFORM: AndroID.mk解析的时候,目标AndroID平台的名字.详情可参考/development/ndk/docs/stable- APIs.txt.
androID-3 -> Official AndroID 1.5 system images
androID-4 -> Official AndroID 1.6 system images
androID-5 -> Official AndroID 2.0 system images
(6) TARGET_ARCH_ABI: 暂时只支持两个value,armeabi和armeabi-v7a。在现在的版本中一般把这两个值简单的定义为arm,通过androID 平台内部对它重定义来获得更好的匹配。其他的ABI将在以后的NDK版本中介绍,它们会有不同的名字。注意所有基于ARM的ABI都会把 'TARGET_ARCH'定义成‘arm’,但是会有不同的‘TARGET_ARCH_ABI’
2. 模块描述变量
(1) LOCAL_PATH: 这个变量用于给出当前文件的路径。你必须在AndroID.mk的开头定义,可以这样使用:
LOCAL_SRC_fileS := foo.c
toto/bar.c
(4) LOCAL_CPP_EXTENSION: 这是一个可选变量,用来指定C++代码文件的扩展名,默认是'.cpp',但是你可以改变它,比如:
LOCAL_CPP_EXTENSION := .cxx
all sources (C,C++ and Assembly). For example:
LOCAL_C_INCLUDES := sources/foo
Or even:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
需要在任何包含LOCAL_CFLAGS / LOCAL_CPPFLAGS标志之前。
'arm' (32-bit instructions) mode. E.g.:
sources/foo/AndroID.mk
sources/foo/lib1/AndroID.mk
sources/foo/lib2/AndroID.mk
include $(call all-subdir-makefiles)
3. AndroID.mk使用模板
(1) 编译应用程序的模板:
#Test Exe
#include $(CLEAR_VARS)
LOCAL_SRC_fileS:= main.c
LOCAL_MODulE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_liBRARIES :=
#LOCAL_SHARED_liBRARIES :=
include $(BUILD_EXECUtable)
(菜鸟级别解释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_fileS中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_liBRARIES加入所需要链接的静态库(*.a)的名称,LOCAL_SHARED_liBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODulE表示模块最终的名称,BUILD_EXECUtable表示以一个可执行程序的方式进行编译。
(2) 编译静态库的模板:
#Test Static lib
include $(CLEAR_VARS)
LOCAL_SRC_fileS:=
helloworld.c
LOCAL_MODulE:= libtest_static
include $(BUILD_STATIC_liBRARY)
(3) 编译动态库的模板:
#Test Shared lib
LOCAL_SRC_fileS:= helloworld.c
LOCAL_MODulE:= libtest_shared
TARGET_PRElink_MODulES := false
out/target/product/generic/obj/EXECUtable
out/target/product/generic/obj/STATIC_liBRARY
out/target/product/generic/obj/SHARED_liBRARY
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
LOCAL_MODulE_PATH:=$(TARGET_ROOT_OUT)
总结以上是内存溢出为你收集整理的cocos2dx android.mk文件详解全部内容,希望文章能够帮你解决cocos2dx android.mk文件详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)