Android.mk简单语法及小例

版权声明:本文为博主原创文章,未经博主允许不得转载。 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))

猜你喜欢

转载自blog.csdn.net/zxc024000/article/details/82823249