1. LOCAL_MODULE_TAGS解释:
控制此模块在什么情况下编译,一般为下面写法:
LOCAL_MODULE_TAGS:= optional
可选择的几个值:
user:指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
2. include $(CLEAR_VARS)
CLEAR_VARS变量是生成系统提供的,它指向一个特殊的GNU Makefile.这个Makefile将会为你自动清除
许多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,,,),
但LOCAL_PATH是例外,它不会被清除。这些变量的清除是必须的,因为所有的控制文件是在单一的GNU make
执行环境中解析的,在这里所有的变量都是全局的。
3.LOCAL_PATH
这个变量用来设置当前文件的路径。必须在Android.mk的开始处定义它,比如:
LOCAL_PATH := $(call my-dir)
这个变量不会被$(CLEAR_VARS)消除,所以每个Android.mk仅需一个定义(以防你在
同一个文件里定义几个组件)。
4. LOCAL_MODULE := xxx
此mk文件生成的程序名称,包括动态库,静态库和可执行程序,如果为动态库,会生成libxxx.so文件
5. LOCAL_SRC_FILES := xxx.c
生成目标程序/库需要的源文件(*.c, *.cpp,*.java)列表
6. include $(BUILD_SHARED_LIBRARY)
编译此模块为动态库
7. include $(BUILD_STATIC_LIBRARY)
生成静态库
8. include $(BUILD_EXECUTABLE)
生成可执行程序
9. LOCAL_SHARED_LIBRARIES
程序依赖的动态库列表,例如
LOCAL_SHARED_LIBRARIES := \
libutils
10. LOCAL_STATIC_LIBRARIES
程序依赖的静态库列表
11. LOCAL_CFLAGS += -Wall -Werror
编译c文件的参数,如设置Wall,优化级别等编译器参数。
12. LOCAL_C_INCLUDES +=
头文件列表
13. include $(BUILD_HOST_STATIC_LIBRARY)
生成宿主机静态库
android.mk 模板:
LOCAL_PATH:= $(call my-dir)
#源文件列表
common_SRC_FILES := \
xxx.cpp \
xxxx.cpp
#头文件列表
common_C_INCLUDES := \
xxx.h
#依赖的动态库列表
common_SHARED_LIBRARIES := \
xxx
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(common_SRC_FILES) #common_SRC_FILES 为变量,保存源文件列表
LOCAL_C_INCLUDES += $(common_C_INCLUDES) #头文件列表
LOCAL_SHARED_LIBRARIES += $(common_SHARED_LIBRARIES)
LOCAL_CFLAGS += -fvisibility=hidden #此处根据需要调整参数
LOCAL_MODULE:= xxx #生成的程序名
include $(BUILD_STATIC_LIBRARY) #此处有三个选择:可执行程序,动态库,静态库调,用上面提到的三个宏
转自http://blog.csdn.net/perfectpdl/article/category/821919
分享到:
相关推荐
在Android开发中,构建系统是至关重要的,它负责编译、链接和打包应用程序或系统组件。其中,`Android.mk`文件是Android构建...正确编写`Android.mk`文件,对于确保C/C++代码在Android平台上的正确编译和运行至关重要。
Android.mk遵循特定的编写规范,以确保编译过程的顺利进行。 首先,我们来看静态库的编写。`LOCAL_PATH`变量用于指定当前目录,`$(call my-dir)`用于获取当前Makefile所在的路径。`include $(CLEAR_VARS)`用来清除...
Android 编译系统 Makefile (Android.mk) 写法 Android 编译系统使用 Makefile 文件来编译和构建 Android 系统中的模块。其中,Android.mk 文件是编译系统的核心配置文件,用于指定编译模块的源文件、编译器选项和...
本篇文章将详细介绍如何进行`androidmk`到`Android.bp`的转换,并探讨两者之间的差异以及转换工具的使用方法。 一、`Android.mk`与`Android.bp`概述 1. `Android.mk`:这是Android早期使用的构建系统,基于GNU ...
### Android.mk 文件语法规范及使用模板详解 #### 一、引言 在深入探讨`Android.mk`文件的具体语法规范和使用模板之前,我们先来简要回顾一下`Android.mk`文件的基本概念及其在Android NDK中的作用。`Android.mk`...
`Android.mk`作为Android NDK中的核心配置文件之一,主要用于向构建系统描述项目的C/C++源代码组织方式及构建逻辑。对于深入理解Android NDK项目构建流程、优化构建性能以及解决构建过程中遇到的问题具有重要意义。 ...
`android.mk`文件是Android NDK中的Makefile,它的主要任务是告诉构建系统如何处理源代码,包括哪些文件需要编译,如何链接,以及如何设置编译选项等。通过编写`android.mk`,开发者可以控制原生库的编译过程,例如...
在Android开发中,构建系统是开发者将源代码转化为可在设备上运行的可执行文件或库的关键部分。...理解并熟练掌握Android.mk的编写技巧,对于Android开发者来说至关重要,因为它直接影响到项目的构建效率和兼容性。
Android.mk 文件是一个微型的 GNU Makefile 片段,由 build system 解析一次或者多次。该文件用于描述 build system 的配置,定义了编译过程中的变量和依赖关系。 Android.mk 文件的基本语法结构如下: 1. LOCAL_...
通用的 `Makefile` 模板旨在提供一个灵活、模块化和跨平台的解决方案,使得开发者能够在不同环境中轻松地编译和管理项目。本文将深入探讨这个模板的核心特性及其在实际开发中的应用。 首先,`Makefile` 的模块化...
**LOCAL_MODULE_TAGS**是Android.mk中一个非常重要的参数,主要用于对模块进行分类,以便于构建系统根据不同的构建类型(如用户版、开发者版或工程版)选择性地编译和包含模块。这个参数允许设置任意数量的空格分隔...
本主题主要介绍两种通用的Makefile模板,适用于.c和.h文件的不同组织结构。 ### 1. 子文件夹结构的Makefile模板 在.c和.h文件分别位于各自子文件夹的情况下,如`src/`包含所有源代码文件,`inc/`包含所有头文件,...
理解Android.mk的语法规范对维护老项目或理解Android系统构建过程至关重要。 总结,Android.mk文件是Android系统构建过程中的核心配置文件,它的语法规范涉及模块定义、依赖管理、编译规则等多个方面。掌握Android....
本文将详细介绍 Android 编译流程 Makefile 流程,并对其进行详细解释。 一、Makefile 概述 Makefile 是一个用于自动编译和构建 Android 系统的脚本文件。它包含了整个编译流程的规则和参数,使得开发者可以方便地...
1. **Android NDK**:FFmpeg是用C/C++编写的,Android原生应用主要使用Java编写,但为了利用FFmpeg,我们需要使用Android Native Development Kit (NDK)。NDK允许开发者在Android上编写和编译C/C++代码,将其与Java...
5. **C/C++共享库**:Android.mk同样支持创建动态链接库(.so文件),这对于跨语言调用或优化性能的原生代码至关重要。 ### 二、自定义变量 在Android.mk中,你可以定义自定义变量来存储各种信息,如源文件列表、...
Android.mk文件的主要内容包括: 1. LOCAL_PATH变量:用于定义当前路径,用于在开发树中查找源文件。 2. include $(CLEAR_VARS):用于清除LOCAL_XXX变量,避免污染全局变量空间。 3. LOCAL_MODULE变量:用于标识...
在Android开发领域,Android NDK(Native Development Kit)是一个至关重要的工具,它允许开发者使用C和C++原生代码来构建部分...了解并熟练掌握`android.mk`的编写,对于进行高效、跨平台的Android原生开发至关重要。
理解 Android.mk 的基本语法和常用变量对于利用 Android NDK 进行高效开发至关重要。 通过遵循 Android.mk 的规范,开发者可以更轻松地维护大型项目,并确保跨版本的一致性和可维护性。此外,这种标准化的方法也有...