浅析Android.mk

当进行Android C/C++项目开发时,需要针对不同的架构编写代码,例如x86、ARM等。而Android.mk文件就是Makefile文件,在编译时告诉编译器如何构建应用程序的配置文件。在本文中,我们将浅析Android.mk文件,介绍其语法体系、常见语句和示例说明。

Android.mk文件语法体系

Android.mk文件包含了编译应用程序需要的所有信息。其基本语法如下:

LOCAL_MODULE := module_name
LOCAL_SRC_FILES := source_file_list
LOCAL_C_INCLUDES := include_directories_list
LOCAL_SHARED_LIBRARIES := shared_libraries_list
LOCAL_STATIC_LIBRARIES := static_libraries_list
LOCAL_LDLIBS := ld_library_list

以下是各个语句的解释说明:
- LOCAL_MODULE:模块名称,可以是动态库、静态库或可执行文件的名称。
- LOCAL_SRC_FILES:源文件列表,即要编译的源代码文件列表,包含了所有需要编译的文件(可以是多个文件)的路径。
- LOCAL_C_INCLUDES:头文件包含路径,用于指定当前模块所需要的头文件所在的目录。
- LOCAL_SHARED_LIBRARIES:依赖动态库列表,当前模块所依赖的动态库。
- LOCAL_STATIC_LIBRARIES:依赖静态库列表,当前模块所依赖的静态库。
- LOCAL_LDLIBS:链接库列表,用于指定当前模块所要链接的库列表。

Android.mk文件常见语句

除了上述基础语句外,Android.mk文件还包含了以下常见语句:

include

include $(CLEAR_VARS)

在Make编译过程中,维护整个编译系统每个模块的状态是非常麻烦的,为了简化这个过程,Android.mk提供了一种实现方式叫做CLEAR_VARS。通过调用CLEAR_VARS,可以清除当前状态,进入无状态状态,然后再添加新的状态。

LOCAL_MODULE_TAGS

LOCAL_MODULE_TAGS := eng

告诉系统,当前模块应该加入到何种列表中。例如上面的例子中,LOCAL_MODULE_TAGS指定为eng,则应用程序会被编译为eng版本,默认值为debug。

LOCAL_MODULE_SUFFIX

LOCAL_MODULE_SUFFIX := .so

在生成模块的各种文件时,默认会在文件后缀中添加模块类型。例如,我们要指定某个模块的类型为库文件.so,则可以使用LOCAL_MODULE_SUFFIX。

LOCAL_ARM_MODE

LOCAL_ARM_MODE := arm

指定ARM编译模式。常用模式有:arm(普通ARM)、armv7(高性能ARMv7)、armv7-aarm-v7n以及实验性的armv7-neon

LOCAL_ARM_NEON

LOCAL_ARM_NEON := true

指定是否启用ARM CPU的NEON加速,优化ARM上的多媒体和渲染应用。

LOCAL_ARM_FEATURES

LOCAL_ARM_FEATURES := neon

指定以下任意一项将启用ARM指令集中的相关硬件功能:neon(SSE类),vfpv3(浮点运算器),vfpv4(新的浮点模式),thumb(16位指令集),thumb2(32位指令集),v7aandroid-21(ARMv7中的新特性)。

Android.mk文件示例说明

下面提供两个典型的示例来说明Android.mk文件的用法和语法体系。

示例1:编译C库

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := my_source.c
LOCAL_MODULE_TAGS := eng
include $(BUILD_SHARED_LIBRARY)

上述代码实现了生成一个C库my_module。首先使用LOCAL_PATH指定当前mk文件所在的目录。然后,每个库文件都应该包含include $(CLEAR_VARS),在编译过程中清空变量,初始化新的变量。使用LOCAL_MODULE指定生成的库名,使用LOCAL_SRC_FILES指定需要编译的源文件列表。最后使用include $(BUILD_SHARED_LIBRARY)指定生成动态库。

示例2:编译C++可执行文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := my_exe
LOCAL_CPPFLAGS  += -DLOGGER
LOCAL_LDLIBS    += -llog -ldl
LOCAL_SRC_FILES := my_source.cpp
include $(BUILD_EXECUTABLE)

上述代码实现了生成一个C++可执行文件my_exe。同样使用LOCAL_PATH指定当前mk文件所在的目录,使用include $(CLEAR_VARS)清空变量。使用LOCAL_CPPFLAGS指定编译选项,使用LOCAL_LDLIBS指定链接器选项。

综上所述,Android.mk文件是Android应用程序编译过程中非常重要的文件,熟练地使用它可以优化应用程序的性能和生成过程。在实际项目开发中,建议根据需求灵活使用Android.mk文件的语法体系和常见语句。

阅读剩余 56%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Android.mk - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • matlab中plot画图参数的设置

    在MATLAB中,plot函数是一种常用的绘图函数,用于绘制二维图形。plot函数可以接受多个参数,用于设置绘图的各种参数,例如线型、颜色、标记等。本文将对MATLAB中plot函数的参数进行详细的分析,并提供两个示例说明。 plot函数的参数 plot函数常用参数如下: x:表示要绘制的数据的x坐标。 y:要绘制的数据的y坐标。 LineSpec:表示线型…

    other 2023年5月9日
    00
  • java学习技术分享:java中的原子操作

    Java学习技术分享:Java中的原子操作 在Java中,原子操作是指不可被中断的操作,即使在多线程环境也能保证操作的原性。本文将详细介绍Java中的原子操作,包括两个示例说明。 1. 原子的概念 原子是指不可被中断的操作,即使在多线程环境下也能保证操作的原子性。在Java中,子操作通常用于多线程环境下的共享变量,以避免数据竞争和线程安全问题。 Java中提…

    other 2023年5月9日
    00
  • CAD怎么制作重合/垂直/水平以及相等约束?

    CAD(计算机辅助设计)软件可以帮助设计师创建和编辑二维和三维模型。在CAD中,约束是一种工具,用于控制和限制对象的位置和关系。下面是关于如何在CAD中创建重合、垂直、水平和相等约束的详细攻略: 1. 重合约束 重合约束用于将两个或多个对象的位置重合在一起。以下是在CAD中创建重合约束的步骤: 步骤 1:选择第一个对象。这可以是点、线、圆、多边形等。 步骤 …

    other 2023年7月28日
    00
  • 关于c#:我们如何在stringbuilder之前添加字符串?

    在C#中,我们可以使用StringBuilder类来动态构建字符串。如果需要在StringBuilder之前添加字符串,可以使用Insert()方法或者Append()方法结合ToString()方法实现。 以下是两个示例说明,演示如何在StringBuilder之前添加字符串。 1:使用Insert()方法 StringBuilder sb = new S…

    other 2023年5月9日
    00
  • 详解maven的setting配置文件中mirror和repository的区别

    以下是关于”Maven的setting配置文件中mirror和repository的区别”的详细讲解攻略。 Maven中的Setting配置文件 Maven是一个项目管理和构建自动化工具,其中Setting配置文件存储了一些 Maven 构建时需要用到的所有信息。 Setting配置文件有两个:用户级别和全局级别。 全局级别的setting文件保存在 \/c…

    other 2023年6月25日
    00
  • RecyclerView优雅实现复杂列表布局

    RecyclerView优雅实现复杂列表布局攻略 介绍 RecyclerView是Android开发中常用的控件,用于展示大量数据的列表布局。它提供了高度的灵活性和性能优化,使得实现复杂列表布局变得更加简单和高效。 本攻略将详细介绍如何使用RecyclerView来实现复杂列表布局,并提供两个示例说明。 步骤 步骤一:添加RecyclerView依赖 首先,…

    other 2023年8月21日
    00
  • Linux内核设备驱动之内核的时间管理笔记整理

    简介 Linux内核设备驱动之内核的时间管理笔记详细讲解了Linux内核中的时间管理机制和相关API函数,涵盖了时钟、定时器、闹钟、计时器等多个方面的知识,并提供了丰富的示例代码进行演示和实践。此篇笔记适合对Linux内核具有一定基础知识的读者阅读。 攻略 (1) 了解内核时间管理机制 在这部分,了解内核时间管理机制是关键,包括系统时间的获取与设置、硬件时钟…

    other 2023年6月27日
    00
  • 逆水寒素问技能进阶搭配图文介绍 素问技能进阶优先级顺序

    逆水寒素问技能进阶搭配攻略 1. 简介 《逆水寒》是一款古风题材的网游,其中素问技能是重要的战斗技能之一。本攻略将详细介绍素问技能进阶的优先级顺序,并给出两个示例说明。 2. 优先级顺序 在进行素问技能进阶搭配时,可以按照以下优先级顺序进行选择: 2.1 主动技能优先 主动技能通常具有较高的输出能力和战略价值,因此应该优先考虑选择主动技能进行进阶。 2.2 …

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部