mk文件介绍

Android.mk简介:

Android.mk文件用来告知NDK Build系统关于Source的信息。Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。
所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。

Android.mk文件语法允许我们将Source打包成一个"modules",modules可以是:

  • 静态库(.a文件)
  • 动态库(.so文件)

只有动态库可以被install/copy到应用程序包(APK), 静态库则可以被链接入动态库。
可以在一个Android.mk中定义一个或多个modules. 也可以将同一份source加进多个modules。
Build System帮我们处理了很多细节而不需要我们再关心。例如:你不需要在Android.mk中列出头文件和外部依赖文件。
NDK Build System自动帮我们提供这些信息。这也意味着,当用户升级NDK后,你将可以受益于新的toolchain/platform而不必再去修改Android.mk。

Android.mk语法

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE 	:= VideoJni
LOCAL_CFLAGS 	:= -DWEBRTC_POSIX -DFIXED_POINT -DUSE_KISS_FFT -DEXPORT="" -UHAVE_CONFIG_H
LOCAL_CPPFLAGS 	:=-std=c++11
LOCAL_LDLIBS 	:=-llog -lc

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/webrtc \
$(LOCAL_PATH)/speex/include

LOCAL_SRC_FILES  := \
com_example_videoclient_VideoJni.cpp \
$(AUDIO_SRC_PATH)/Host.cpp \
speex/libspeex/bits.c \


include $(BUILD_SHARED_LIBRARY)
1、LOCAL_PATH
LOCAL_PATH := $(call my-dir)

每个Android.mk文件必须以定义LOCAL_PATH为开始,它用于在开发tree中查找源文件;宏my-dir则由Build System提供,返回包含Android.mk的目录路径。

2、CLEAR_VARS
include $(CLEAR_VARS)

CLEAR_VARS 变量由Build System提供,并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx。例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH,这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的,所以清理后才能避免相互影响。

3、LOCAL_MODULE
LOCAL_MODULE 	:= VideoJni

LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格
Build System会自动添加适当的前缀和后缀。例如,VideoJni,要产生动态库,则生成libVideoJni.so。 但请注意:如果模块名被定为:libxxx,则生成libxxx.so,不再加前缀。
在这里插入图片描述

4、LOCAL_CFLAGS
LOCAL_CFLAGS 	:= -DWEBRTC_POSIX -DFIXED_POINT -DUSE_KISS_FFT -DEXPORT="" -UHAVE_CONFIG_H

提供给 C/C++ 编译器的额外编译参数, 比如指定所有warning成error, 指定优化等级这些, 比如: LOCAL_CFLAGS := -Werror

5、LOCAL_CPPFLAGS
LOCAL_CPPFLAGS 	:=-std=c++11

为C++文件定义额外标志

6、LOCAL_LDLIBS
LOCAL_LDLIBS 	:=-llog -lc

指定程序所依赖的链接库,-llog链接Android NDK的日志库 -lc连接C语言库

7、LOCAL_C_INCLUDES
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/webrtc \
$(LOCAL_PATH)/speex/include
8、LOCAL_SRC_FILES

C/C++所需的头文件路径

LOCAL_SRC_FILES  := \
com_example_videoclient_VideoJni.cpp \
$(AUDIO_SRC_PATH)/Host.cpp \
speex/libspeex/bits.c \

当前模块包含的所有源码文件

9、BUILD_SHARED_LIBRARY
include $(BUILD_SHARED_LIBRARY)

BUILD_SHARED_LIBRARYBuild System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息,并决定编译为什么。

  • BUILD_STATIC_LIBRARY:编译为静态库
  • BUILD_SHARED_LIBRARY:编译为动态库
  • BUILD_EXECUTABLE:编译为Native C可执行程序

PS:在mk文件所在的路径下,执行ndk-build,就可以编译出so库。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值