当前位置:网站首页>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可执行程序
边栏推荐
猜你喜欢
微文案也能提升用户体验
swin-transformer训练自己的数据集<自留>
Maykle Studio - HarmonyOS Application Development Fourth Training
栈stack
精彩联动 | OpenMLDB Pulsar Connector原理和实操
ARM 汇编指令 ADR 与 LDR 使用
Vscode远程连接服务器终端zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
NUC980-开发环境搭建
场景驱动的特征计算方式OpenMLDB,高效实现“现算先用”
关于接口响应内容的解码
随机推荐
The latest safety helmet wearing recognition system in 2022
Promise 中状态改变和回调执行先后顺序 和promise多次回调
swin-transformer训练自己的数据集<自留>
CMT2380F32模块开发7-reset例程
Error: Flash Download failed - “Cortex-M4“-STM32F4
Ubuntu下安装mysql笔记
OpenMLDB Pulsar Connector:高效打通实时数据到特征工程
论文解读:GAN与检测网络多任务/SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
STM32-中断优先级管理NVIC
CMT2380F32模块开发8-Base Timer例程
Vscode远程连接服务器终端zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
vmware不可恢复错误vmui
STM32学习笔记(白话文理解版)—外部IO中断实验
Safety helmet recognition system
产品如何拟定优化方案?
typescript学习日记,从基础到进阶(第二章)
哥德巴赫猜想与整数环
STM32F407-浅~~析UART异步通信&USART_Init函数入口参数
第四范式OpenMLDB优化创新论文被国际数据库顶会VLDB录用
OpenMLDB Meetup No.2 会议纪要