Android makefile
示例
/** Android.mk文件必须从这一行定义开始,my-dir宏是build系统自带的函数,返回当前目录 */
LOCAL_PATH := $(call my-dir)
/** CLEAR_VARS是build系统自带的变量,指示makefile脚本清除所有LOCAL_XXX变量,除了LOCAL_PATH */
include $(CLEAR_VARS)
/** LOCAL_MODULE变量必须被定义以区分模块,所以名字必须是唯一的且不能包含任何空白,build系统会据此自动生成Lib文件名,比如,libhello-jni.so */
LOCAL_MODULE := hello-jni
/** LOCAL_SRC_FILES变量必须包含C/C++的源代码列表,不要列出头文件和include文件,因为build系统会自动检查每个文件的依赖 */
LOCAL_SRC_FILES := hello-jni.c
/** BUILD_SHARED_LIBRARY是build系统自带的变量,指示makefile脚本收集自最近一次CLEAR_VARS之后我们定义的所有LOCAL_XXX变量,并且指示生成的是Shared Library。与之相对的变量是BUILD_STATIC_LIBRARY */
include $(BUILD_SHARED_LIBRARY)
NOTE:以LOCAL_、PRIVATE_、NDK_、APP_开头的变量以及小写字母的变量时build系统的保留字,建议使用MY_<prefix>来定义自己的变量。
NDK宏函数
调用:$(call <function>)
my-dir:返回当前Android.mk文件所在的目录
all-subdir-makefiles:返回在当前my-dir的所有子目录中的Android.mk文件的列表
this-makefile:返回当前Android.mk的路径
parent-makefile:返回上一层Android.mk的路径
grand-parent-makefile:
模块描述变量
LOCAL_PATH:当前基准路径
LOCAL_MODULE:模块名称,必须唯一
LOCAL_SRC_FILES:构建模块的源文件列表
LOCAL_CPP_EXTENSION:C++文件扩展名,默认为.cpp
LOCAL_C_INCLUDES:相对于NDK根路径的C include文件列表
LOCAL_CFLAGS:C和C++的编译标志
LOCAL_CXXFLAGS:LOCAL_CPPFLAGS的别名
LOCAL_CPPFLAGS:C++的编译标志
LOCAL_STATIC_LIBRARIES:链接的static libraries列表,仅对shared library有效
LOCAL_SHARED_LIBRARIES:运行时依赖的shared libraries列表
LOCAL_LDLIBS:额外的连接标志,比如链接系统库文件libz.o,则LOCAL_LDLIBS:=-lz
LOCAL_ALLOW_UNDEFINED_SYMBOLS:允许没有定义的符号
LOCAL_ARM_MODE、LOCAL_ARM_NEON、LOCAL_DISABLE_NO_EXECUTE看不懂