1: 定义:
Android.mk 是向Android NDK 构建系统描述NDK项目的GUN MakeFile片段。
2:内容定义
Android.mk 文档必须以LOCAL_PATH 变量的定义开头,
因为:Android 构建系统 要利用LOCAL_PATH 来定位源文件。
LOCAL_PATH :=$ (call my-dir)
清除变量 CLEAR_VARS
Android构建系统将该变量设置为clear-vars.mk片段的位置。可以清除LOCAL_PATH 以外的LOCAL_<name> 变量。
Include $(CLEAR_VARS)
LOCAL_MODULE
用来给模块=设定唯一的名称。比如:要生成的可执行程序名称,动态库名称,静态库名称。
LOCAL_SRC_FILES:
定义模块源文件列表。
BUILD_SHARED_LIBRARY:
构建共享库
Include $(BUILD_SHARED_LIBRARY)
BUILD_STATIC_LIBRARY:
构建静态库
Include $(BUILD_STATIC_LIBRARY)
BUILD_STATIC_LIBRARY:
构建可执行程序
Include $(BUILD_EXECUTABLE)
LOCAL_STATIC_LIBRARIES:
引用静态库
LOCAL_STATIC_LIBRARIES := 静态库名
LOCAL_SHARED_LIBRARIES:
引用动态库
LOCAL_SHARED_LIBRARIES := SO库名
LOCAL_CPP_FEATURES:
可选变量,用来指明 模块所依赖的C++ 特性。
LOCAL_CPP_EXTENSION:
C++源文件的默认扩展名是.cpp ,这个变量可以用来为C++源代码 指定一个或者多个文件扩展名。如下所示:
LOCAL_CPP_EXTENSION := .cpp .cxx
TARGET_ARCH:
目标CPU体系结构名称,例如:arm
TARGET_PLATFORM:
目标Android 平台的名称,例如:android-3
TARGET_ARCH_ABI:
目标CPU体系结构和ABI的名称。例如:armeabi-7a
TARGET_ABI:
目标平台和ABI的串联。例如:android-3-armeabi-v7a
LOCAL_MODULE_FILENAME
可选变量,用来重新定义生成的文件名称。
LOCAL_C_INCLUDES:
可选目录列表,NDK安装目录相对路径,用来搜索头文件。
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_CFLAGS:
可选编译器标志,
LOCAL_CPP_FLAGS:
可选编译标志,在只编译C++源文件时传给编译器。
LOCAL_WHOLE_STATIC_LIBRARIES:
用来指明应该被包含在生成共享库中的所有静态库内容。
注意:当几个静态库之间有循环依赖是 这个标记很有用。
LOCAL_LDLIBS:
连接标志的可选列表。用于传送要进行动态日阿莲姐的系统库列表。
LOCAL_ALLOW_UNDEFINED_SYMBOLS:
可选参数,禁止在生成的文件中进行缺失符号检查,若没有定义,连接器会在符号缺失时生成错误信息。
LOCAL_ARM_MODE
可选参数,ARM机器体系中结构特有变量,用于要生成的ARM二进制类型,默认情况下,构建系统在拇指模式下用16位指令生成。但该变量 可以被设置成arm 来指定用32位指令。
LOCAL_ARM_MODE :=arm
LOCAL_EXPORT_CPPFLAGS:
和LOCAL_EXPORT_CLAGS一样,但是它是C++特定代码编译器标志
LOCAL_EXPORT_LDFLAGS:
和LOCAL_EXPORT_CLAGS一样,但是用作连接器器标志
LOCAL_EXPORT_C_INCLUDES:
允许记录路径集
注意:在Andoid NDK构建系统中,共享模块路径不能包含空格。
在实际的Android 应用程序中并不直接是哟静态库,并且应用程序中也不包含静态库。但静态库可以用来构建共享库。
同时使用静态库和动态库时,可以在模块间共享通用模块,但要说明的是,所有这些模块必须属于同一个NDK项目。