- Android.mk文件是告知NDK Build System关于Source的信息。
- Android.mk是GNU Makefile的一部分,将被Build System解析一次或多次。
# 1.必须以LOCAL_PATH开头,用于在开发树种查找源文件
# 2.my-dir为宏,由编译系统提供,返回包含Android.mk文件的目录路径
LOCAL_PATH := $(call my-dir)
# 1.CLEAR_VARS由build system提供,指向一个指定的GNU Makefile
# 2.负责清理LOCAL_xxx变量,但不清理LOCAL_PATH
# 3.由于所有编译文件都是同一个GNU Makefile解析和执行,变量是全局的,所以清理后才能避免相互影响
include $(CLEAR_VARS)
# 1.包含要编译的源文件
LOCAL_SRC_FILES := src/1.cpp src/2.cpp src/3.cpp \
src/4.cpp src/5.cpp src/6.cpp
# 打印信息方法
$(info $(LOCAL_SRC_FILES))
$(warning $(LOCAL_SRC_FILES))
$(error $(LOCAL_SRC_FILES))
# 1.追加要搜索的头文件目录
LOCAL_C_INCLUDES += itf/
# 1.android系统编译环境配置成debug时加入test工程
# 2.envsetup.sh中choosecombo第一个参数配置2即是debug模式
ifeq ($(TARGET_BUILD_TYPE), debug)
# 获取test目录下所有cpp文件
define all-cpp-files-under
# 1.$(patsubst <pattern>,<replacement>,<text>):查找<text>中单词是否符合<pattern>,如果匹配,则以<replacement>替换。
# 2.%通配符,表示任意长度字符串
$(patsubst ./%,%, $(shell cd $(LOCAL_PATH)/test;find $(1) -name "*.cpp" -or -name "*.cc" -and -not -name ".*"))
endef
define all-test-cpp-files
$(call all-cpp-files-under,.)
endef
LOCAL_SRC_FILES += $(call all-test-cpp-files)
LOCAL_C_INCLUDES += test/include
endif
# 1.依赖的动态链接库
# 2.LOCAL_SHARED_LIBRARIES一般是先找编译好的,找不到就编译得到
# 3. LOCAL_LDLIBS 一般用于链接系统编译的库
# 4. LOCAL_LDFLAGS 一般用于链接第三方库,库要包含扩展名
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_LDLIBS := $(LOCAL_PATH)/src/liblog
LOCAL_LDFLAGS := $(LOCAL_PATH)/src/libthird.so
# 1.指定可识别cpp文件的扩展名,只能选择一种,不支持混合
LOCAL_CPP_EXTENSION:=.cc .cpp .cxx
# 1.定义要生成的模块名字,这里命名为myModule
# 2.build system会自动添加适当的前缀和后缀,例如生成动态库则为libmyModule.so
LOCAL_MODULE := myModule
# 1.指定install路径
# 2.optional: out/target/product/OK6410/symbols/system/
# 3.eng: out/target/product/Ok6410/system/
LOCAL_MODULE_TAGS := optional
# 1.keep_symbols:保留动态库中的符号信息
# 2.false:去掉动态库中的符号表等调试信息
LOCAL_STRIP_MODULE := keep_symbols
LOCAL_INIT_RC := myModule.rc
# 1.可选设置,在编译C/C++源码时附加编译选项
# 2.比如编译时附加搜索头文件目录的选项,如下所示。这种方法比LOCAL_C_INCLUDES要好,可以被ndk-debug使用
# Wall:所有的警告信息,Werror:所有的错误信息, Wunused:所有的未使用变量信息,Wunreachable-code:所有的未找到定义的信息
LOCAL_CFLAGS += -I<path>
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
# 1.分别编译成动态库、静态库、可执行native程序方法
# 2.实际使用中选择一个即可
# 3.主要作用是收集自从上次调用include $(CLEAR_VARS)后的所有LOCAL_xxx信息
include $(BUILD_SHARED_LIBRARY)
include $(BUILD_STATIC_LIBRARY)
include $(BUILD_EXECUTABLE)
#参考链接
https://developer.android.com/ndk/guides/android_mk?hl=zh-cn