大佬教程收集整理的这篇文章主要介绍了] cocos2dx android.mk文件详解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Introduction:
android.mk文件详解" title="cocos2dx
一、概述
jni/Hellojni.c
jni/Android.mk
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文件详解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。