Android.mk的常用函数整理说明

makefile文件控制整个工程的编译规则,比如指定需要生成哪些目标文件,指明生成这些目标文件依赖哪些源文件,指明生成的目标文件放在哪个文件夹下等等。而make就是一个命令工具,可以解析makefile文件中的指令的一个命令工具。

android.mk也是一样的功能,只不过它是android编译环境下的一种特殊的“makefile”文件, 它是经过了android编译系统处理的。所谓android编译系统,就是android顶层目录下的build目录里面的一系列编译控制文件,其实就是一系列makefile文件和 *.mk 文件,这些文件才是编译android系统完整的makefile文件.每个模块里的android.mk只不过是被包含进android编译系统的一小部分而已。经过android编译系统的一大堆处理,android.mk的格式就变得非常简单,且与普通的makefile文件书写格式不一样了,但这有利于为Android增加一个新的Component。

关于Android.mk可以参考博客:https://www.cnblogs.com/cj5785/p/9893162.html

常用具体讲解:

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

2.include $(CLEAR_VARS)
CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx
因系统在单一GNU Make执行环境中解析所有构建控制文件,LOCAL_XXX变量是全局的,所以描述每个模块之前,声明此变量,可以清除关乎所以LOCAL_xx,这样清理避免相互影响。

3.LOCAL_SRC_FILES := ServiceUtilities.cpp
LOCAL_SRC_FILES, 包含要编译到模块中的C或C++源文件列表

4.LOCAL_MODULE := libserviceutility
存储所要编译的模块的名称, 每个模块名称必须唯一,且不含任何空格。编译系统在生成最终共享库文件,会对分配的名称自动添加正确的前缀和后缀

5.include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY,变量指向一个GNU Makefile脚本,该脚本会收集自include依赖在LOCAL_XXX变量中所定义的所有信息。此脚本确定要编译的内容以及编译方式。共享库变量会导致编译系统生成.so的库文件

6.LOCAL_SHARED_LIBRARIES
编译需要的动态库

Android.mk源码参考:

#每个Android.mk文件必须定义LOCAL_PATH,它用于在开发tree中查找源文件。
#宏my-dir则由Build System提供,返回包含Android.mk的目录路径
LOCAL_PATH:= $(call my-dir)
#CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx
#因系统在单一GNU Make执行环境中解析所有构建控制文件,LOCAL_XXX变量是全局的,
#所以描述每个模块之前,声明此变量,可以清除关乎所以LOCAL_xx,这样清理避免相互影响。

include $(CLEAR_VARS)

#包含要编译到模块中的C或C++源文件列表
LOCAL_SRC_FILES := \
    ServiceUtilities.cpp

# FIXME Move this library to frameworks/native,存储所要编译的模块的名称
#每个模块名称必须唯一,且不含任何空格。编译系统在生成最终共享库文件,会对分配的名称自动添加正确的前缀和后缀,
LOCAL_MODULE := libserviceutility

LOCAL_SHARED_LIBRARIES := \
    libcutils \
    libutils \
    liblog \
    libbinder

LOCAL_CFLAGS := -Wall -Werror

#BUILD_SHARED_LIBRARY,变量指向一个GNU Makefile脚本
#该脚本会收集自include依赖在LOCAL_XXX变量中所定义的所有信息。此脚本确定要编译的内容以及编译方式。
#共享库变量会导致编译系统生成.so的库文件
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:=               \
    AudioFlinger.cpp            \
    Threads.cpp                 \
    Tracks.cpp                  \
    AudioHwDevice.cpp           \
    AudioStreamOut.cpp          \
    SpdifStreamOut.cpp          \
    Effects.cpp                 \
    PatchPanel.cpp              \
    StateQueue.cpp              \
    BufLog.cpp                  \
    TypedLogger.cpp

LOCAL_C_INCLUDES := \
    frameworks/av/services/audiopolicy \
    frameworks/av/services/medialog \
    $(call include-path-for, audio-utils)

LOCAL_SHARED_LIBRARIES := \
    libaudiohal \
    libaudioprocessing \
    libaudiospdif \
    libaudioutils \
    libcutils \
    libutils \
    liblog \
    libbinder \
    libaudioclient \
    libmedialogservice \
    libmediautils \
    libnbaio \
    libnblog \
    libpowermanager \
    libserviceutility \
    libmediautils \
    libmemunreachable \
    libmedia_helper

LOCAL_STATIC_LIBRARIES := \
    libcpustats \

LOCAL_MULTILIB := $(AUDIOSERVER_MULTILIB)

LOCAL_MODULE:= libaudioflinger

LOCAL_SRC_FILES += \
    AudioWatchdog.cpp        \
    FastCapture.cpp          \
    FastCaptureDumpState.cpp \
    FastCaptureState.cpp     \
    FastMixer.cpp            \
    FastMixerDumpState.cpp   \
    FastMixerState.cpp       \
    FastThread.cpp           \
    FastThreadDumpState.cpp  \
    FastThreadState.cpp

LOCAL_CFLAGS += -DSTATE_QUEUE_INSTANTIATIONS='"StateQueueInstantiations.cpp"'

LOCAL_CFLAGS += -fvisibility=hidden

LOCAL_CFLAGS += -Werror -Wall

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

发布了39 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43443900/article/details/103381463