一、NDK变量
1、CLEAR_VARS
指向一个编译脚本。必须在新模块前包含之。作用:清除除LOCAL_PATH外的所有环境变量
include $(CLEAR_VARS)
2、BUILD_SHARED_LIBRARY
指向一个编译脚本,它收集自从上次调用 include $(CLEAR_VARS)后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个动态库。 注意,在包含此文件前,至少应该包含:LOCAL_MODULE和LOCAL_SRC_FILES两个变量。
include $(BUILD_SHARED_LIBRARY)
3、BUILD_STATIC_LIBRARY
收集自从上次调用include $(CLEAR_VARS)后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个静态库。 静态库不能够加入到Project 或者APK中。但它可以用来生成动态库。
include $(BUILD_STATIC_LIBRARY)
4、BUILD_EXECUTABLE
Source编译成一个可执行Native程序
include $(BUILD_EXECUTABLE)
5、PREBUILT_SHARED_LIBRARY
把这个共享库声明为 “一个” 独立的模块。
指向一个build 脚本,用来指定一个预先编译好多动态库。 与BUILD_SHARED_LIBRARY and BUILD_STATIC_LIBRARY不同,
此时模块的LOCAL_SRC_FILES应该被指定为一个预先编译好的动态库,而非源文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt # 模块名
LOCAL_SRC_FILES := libfoo.so # 模块的文件路径(相对于 LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY
6、PREBUILT_STATIC_LIBRARY
预先编译的静态库。 同上
7、TARGET_ARCH
目标CPU架构名。如果为 “arm” 则声称ARM兼容的指令。与CPU架构版本无关
8、TARGET_PLATFORM
目标平台的名字。
二、NDK宏
有通过类似:$(call function)的方式来得到其值,它将返回文本化的信息。
1、my-dir
返回最近一次include的Makefile的路径。通常返回Android.mk所在的路径。它用来作为Android.mk的开头来定义LOCAL_PATH.
LOCAL_PATH := $(call my-dir)
2、all-subdir-makefiles
返回一个列表,包含'my-dir'中所有子目录中的Android.mk
3、this-makefile
当前Makefile的路径
4、parent-makefile
返回include tree中父Makefile 路径。 也就是include 当前Makefile的Makefile Path
5、import-module
允许寻找并inport其它modules到本Android.mk中来。 它会从NDK_MODULE_PATH寻找指定的模块名。
$(call import-module,<name>)
6、all-subdir-java-files
获取子目录下所有的Java文件
7、all-java-files-under
$(call all-java-files-under, <src>) :获取指定目录下的所有java文件。
三、模块描述变量
在'include $(CLEAR_VARS)' 和 'include $(BUILD_XXXXX)'之间。必须定义此类变量。
1、LOCAL_PATH
这个值用来给定当前目录。必须在Android.mk的开始位置定义。
LOCAL_PATH := $(call my-dir) //LOCAL_PATH不会被include $(CLEAR_VARS) 清理
2、LOCAL_MODULE
由此变量名决定最终生成的目标文件名
3、LOCAL_SRC_FILES
为Build Modules而提供的Source文件列表
4、LOCAL_CPP_EXTENSION
指出C++ 扩展名。(可选)
LOCAL_CPP_EXTENSION := .cxx 从NDK R7后,可以写多个:
LOCAL_CPP_EXTENSION := .cxx .cpp .cc
5、LOCAL_C_INCLUDES
包含头文件
6、LOCAL_CFLAGS
一个可选的设置,在编译C/C++ source 时添加如Flags。
也可以指定include 目录通过:LOCAL_CFLAGS += -I<path>。 这个方法比使用LOCAL_C_INCLUDES要好
7、LOCAL_STATIC_LIBRARIES
要链接到本模块的静态库list
8、LOCAL_SHARED_LIBRARIES
要链接到本模块的动态库
9、LOCAL_LDLIBS
可以用它来添加系统库。 如 -lz:
LOCAL_LDLIBS := -lz