2011-8-13 16:34:40

来源:互联网 发布:bp神经网络算法 公式 编辑:程序博客网 时间:2024/05/01 20:43
 

 

2011-8-13 16:34:40


TARGET_ARCH
TARGET_ARCH指框架中CPU的名字已经被Android开源代码明确指出了,这里的arm包含了任何ARM-独立结构的架构,以及每个独立的CPU版本

TARGET_PLATFORM
Android平台的名字在Android.mk中被解析,比如"android-3"对应Android 1.5系统镜像,对于平台的名称对应Android系统的列表,请看docs/STABLE-APIS.html

TARGET_ARCH_ABI
在Android.mk中被解析时指CPU+ABI的名字。

目前支持的两个值
armeabi for ARMv5TE
armeabi-v7a

注意,到Android NDK 1.6_r1,这个值被简化为"arm"。然而,这个值被重定义可以更好的匹配Android平台内部使用的是什么

更多的信息可以参见docs/CPU-ARCH-ABIS.html

未来的NDK版本中得到支持,它们会有一个不同的名字,注意所有基于ARM的ABI都会有一个"TARGET_ARCH"被定义给arm,但也有可能有不同的"TARGET_ARCH_ABI"

TARGET_ABI

目标平台和ABI的链接,这里要定义$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI)它们都非常有用,特别是当你想测试一下具体的系统镜像在一个真实设备环境的时候

默认地,这个是"android-3-armeabi"

(到Android NDK 16_R1版本,使用"android-3-arm"作为默认)

NDK提供的宏功能
--------------------------------
以下是使用GNU make的宏功能,必须通过使用"$(call <function>)",返回一个文本信息。

my-dir

返回最后包含的makefile的路径,这通常是当前Android.mk所在目录的路径,在Android.mk开始之前定义
LOCAL——PATH是很有用的。

my-dir 预定义路径宏


在Android.mk文件的开始位置定义
LOCAL_PATH :=$(call my-dir)

...声明一个模块
include $(LOCAL_PATH)/foo/Android.mk

LOCAL_PATH :=($call my-dir)

...声明另一个模块
这里的问题是第二次调用"my-dir"定义LOCAL_PATH替换$PATH为$PATH/foo,由于在此之前执行过。

对于这个原因,最好是将额外的其他所有东西都在Android.mk中包含进来

LOCAL_PATH :=$(call my-dir)

...声明一个模块

LOCAL_PATH :=$(call my-dir)
...声明另一个模块

#在Android.mk的最后额外包括进来
include $(LOCAL_PATH)/foo/Android.mk

如果这样不方便的话,保存第一个my-dir调用的值到另一个变量中,例如

MY_LOCAL_PATH :=$(call my-dir)
LOCAL_PATH :=$(MY_LOCAL_PATH)
...声明一个模块

include $(LOCAL_PATH)/foo/Android.mk
LOCAL_PATH :=$(MY_LOCAL_PATH)
...声明另一个模块

all-subdir-makefiles
返回一个Android.mk文件所在位置的列表,以及当前的my-dir的路径。比如
sources/foo/Android.mk
sources/foo/lib1/Android.mk
sources/foo/lib2/Android.mk

如果sources/foo/Android.mk包含了这行语句
include $(call all-subdir-makefiles)

那么,它将会自动将sources/foo/lib1/Android.mk和sources/foo/lib2/Android.mk包含进来。

此功能可以用于提供深层嵌套的源代码目录build system的层次结构。请注意,默认情况下,NDK只会寻找
sources/*Android.mk

this-makefile
返回当前makefile的路径(也就是那个功能被调用了)

parent-makefile
返回makefile的包含树,也就是包含Makefile当前的文件

grand-parent-makefile
你猜?

import-module
一个允许你通过名字找到并包含另一个模块的的Android.mk的功能,例如

$(call import-module,<name>)

这将会找到通过NDK_MODULE_PATH环境变量引用的模块<name>的目录列表,并且将其自动包含到
Android.mk中

详细信息请参阅:docs/IMPORT-MODULE.html

模块变量描述:
----------------------------------
下面的这些变量是用来描述怎样用你的模块来编译系统的。你可以定义它们中的一些比如
"include $(CLEAR_VARS)"和"include $(BUILD_XXX)",正如前面所写的,$(CLEAR_VARS)是一个可以取消定义/清楚所有变量的脚本。

原创粉丝点击