当前位置:网站首页>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_LIBRARY 是Build System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息,并决定编译为什么。
- BUILD_STATIC_LIBRARY:编译为静态库
- BUILD_SHARED_LIBRARY:编译为动态库
- BUILD_EXECUTABLE:编译为Native C可执行程序
边栏推荐
猜你喜欢

Mei cole studios - deep learning second BP neural network

aPaaS和iPaaS的区别

场景驱动的特征计算方式OpenMLDB,高效实现“现算先用”

ActiveReports报表分类之页面报表

SWOT分析法

Diagnostic Log and Trace——为应用程序和上下文设置日志级别的方法

华为IOT平台温度过高时自动关闭设备场景试用

从概念认识AI

STM32-库函数-SetSysClock(void)函数解析-正点原子探索者

Mei cole studios - fifth training DjangoWeb application framework + MySQL database
随机推荐
开源之夏 2022 火热来袭 | 欢迎报名 OpenMLDB 社区项目~
需求文档(PRD)撰写指南
C语言中switch的嵌套
字节(byte)和位(bit)
net6 的Web MVC项目中事务功能的应用
EMQX企业版试用笔记
论文解读:跨模态/多光谱/多模态检测 Cross-Modality Fusion Transformer for Multispectral Object Detection
STM32学习笔记(白话文理解版)—按键控制
STM32学习总结(二)——GPIO
pip安装报错:is not a supported wheel on this platform
vmware不可恢复错误vmui
CMT2380F32模块开发1-硬件
弱监督语义分割CLIMS(CVPR2022)
博客目录
STM32-中断优先级管理NVIC
typescript学习日记,从基础到进阶(第二章)
openlayer中实现截图框截图的功能
USB中用NRZI来编码数据
swin-transformer训练自己的数据集<自留>
红外线一认识