Ndk之Android.mk

Android NDK之Android.mk

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> 变量。/<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项目。


分享到:


相關文章: