当前位置:网站首页>mk文件介绍

mk文件介绍

2022-08-11 05:28:00 余生爱静

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可执行程序
原网站

版权声明
本文为[余生爱静]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u011557841/article/details/124022657