Android.mk 文件是 Android 构建系统中用于定义模块和依赖关系的 Makefile 文件。它使用一系列变量来指定源文件、库、编译选项等。以下是一些常用的 Android.mk 变量及其用途:
常用变量
-
模块名称
LOCAL_MODULE: 模块的名称,必须唯一。LOCAL_MODULE := mymodule
-
源文件
LOCAL_SRC_FILES: 指定模块的源文件列表。LOCAL_SRC_FILES := main.c myfunc.c
-
C/C++ 标志
LOCAL_CFLAGS: C 编译器标志。LOCAL_CFLAGS := -Wall -WextraLOCAL_CPPFLAGS: C++ 编译器标志。LOCAL_CPPFLAGS := -std=c++11LOCAL_C_INCLUDES: 指定额外的头文件搜索路径。LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
-
库
LOCAL_SHARED_LIBRARIES: 指定模块依赖的共享库。LOCAL_SHARED_LIBRARIES := libfoo libbarLOCAL_STATIC_LIBRARIES: 指定模块依赖的静态库。LOCAL_STATIC_LIBRARIES := libfoo_staticLOCAL_LDLIBS: 链接器标志,通常用于链接系统库。LOCAL_LDLIBS := -llog -lz
-
输出类型
LOCAL_MODULE_CLASS: 模块的类别,如SHARED_LIBRARIES、STATIC_LIBRARIES、EXECUTABLES。LOCAL_MODULE_CLASS := SHARED_LIBRARIESLOCAL_MODULE_SUFFIX: 模块的文件扩展名。LOCAL_MODULE_SUFFIX := .so
-
路径和文件
LOCAL_PATH: 当前目录的路径,通常在每个Android.mk文件的开头定义。LOCAL_PATH := $(call my-dir)LOCAL_SRC_FILES: 源文件路径。LOCAL_SRC_FILES := $(LOCAL_PATH)/src/main.c
-
编译选项
LOCAL_ARM_MODE: 指定 ARM 模式(arm或thumb)。LOCAL_ARM_MODE := armLOCAL_MULTILIB: 指定多库模式(both、32、64)。LOCAL_MULTILIB := both
-
清理变量
include $(CLEAR_VARS): 清理所有本地变量,以便重新定义一个新的模块。include $(CLEAR_VARS)
-
构建规则
include $(BUILD_SHARED_LIBRARY): 构建一个共享库。include $(BUILD_SHARED_LIBRARY)include $(BUILD_STATIC_LIBRARY): 构建一个静态库。include $(BUILD_STATIC_LIBRARY)include $(BUILD_EXECUTABLE): 构建一个可执行文件。include $(BUILD_EXECUTABLE)
-
预构建模块
include $(PREBUILT_SHARED_LIBRARY): 包含预构建的共享库。深色版本-
include $(PREBUILT_STATIC_LIBRARY)
示例 Android.mk 文件
以下是一个完整的 Android.mk 文件示例,展示了如何定义一个共享库模块:
# 指定当前目录
LOCAL_PATH := $(call my-dir)# 清理所有本地变量
include $(CLEAR_VARS)# 模块名称
LOCAL_MODULE := mylib# 源文件列表
LOCAL_SRC_FILES := src/myfunc.c src/main.c# 头文件搜索路径
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include# C 编译器标志
LOCAL_CFLAGS := -Wall -Wextra# 链接器标志
LOCAL_LDLIBS := -llog -lz# 依赖的共享库
LOCAL_SHARED_LIBRARIES := libfoo libbar# 构建一个共享库
include $(BUILD_SHARED_LIBRARY)
总结
Android.mk 文件通过一系列变量来定义模块的属性和依赖关系。