版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxc024000/article/details/82823249
Android.mk简单语法及小例
- Android.mk同Makefile,用来指定项目编译时需要的源文件、头文件路径、依赖的lib(动态或静态),以及指定编译的版本(User\Eng\Test\Optional)、编译器的可选参数等等。
- 其实,Android.mk可以简单理解为关键字和语法规范拼凑起来,用于编译的脚本语言。
常用关键字
-
LOCAL_PATH:=$(call my-dir)
LOCAL_PATH表示当前工程的根目录
(call my-dir),用来返回当前目录的地址 -
include $(CLEAR_VARS)
CLEAR_VARS,会清理掉所有以LOCAL_开头的内容,除了LOCAL_PATH。
一般来讲,在编译前都需要清理一下环境。 -
LOCAL_SRC_FILES
源文件列表,源文件的路径,根据LOCAL_PATH路径书写。 -
LOCAL_MODULE
LOCAL_MODULE指定编译出的内容(动态库、静态库、可执行程序)的名称,该名称需要唯一。 -
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY生成动态库
BUILD_STATIC_LIBRARY生成静态库
BUILD_EXECUTABLE生成可执行程序 -
LOCAL_STATIC_LIBRARIES
编译模块依赖的静态库 -
LOCAL_SHARED_LIBRARIES
编译模块依赖的动态库 -
LOCAL_LDLIBS
编译时,链接器的选项 -
LOCAL_C_INCLUDES
指定头文件的路径 -
LOCAL_MODULE_TAGS
user,该模块只在user版本下编译
eng,该模块只在eng版本下编译
tests,该模块只在tests版本下编译
optional,该模块在所有版本下都编译 -
first-makefiles-under
include $(call first-makefiles-under,$(LOCAL_PATH))
在LOCAL_PATH的所有子目录中查找.mk文件,不包括当前目录
小例
- 利用上面的关键字,可以写一个简单的mk。
# 指定项目根路径,清理变量
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
# 指定源文件
LOCAL_SRC_FILES := \
xxxx.cpp
# 指定头文件路径
LOCAL_C_INCLUDES :=\
$(LOCAL_PATH)/include \
# 依赖的静态库
LOCAL_STATIC_LIBRARIES := libxxxx
# 依赖的动态库,一般库文件如libc.so,只需要写文件名libc即可。
LOCAL_SHARED_LIBRARIES := \
libxxxxx
# 动态库路径
LOCAL_LDLIBS := -L./ xxxxxxx
# 生成的模块名
LOCAL_MODULE := libxxxx
# eng版本时编译该模块
LOCAL_MODULE_TAGS := eng
# 编译为动态库
include $(BUILD_SHARED_LIBRARY)
# 查找根目录下的mk文件
#include all testcase
include $(call first-makefiles-under,$(LOCAL_PATH))