Android.mk的变量有哪些

embedded/2024/11/29 21:02:07/

Android.mk 文件是 Android 构建系统中用于定义模块和依赖关系的 Makefile 文件。它使用一系列变量来指定源文件、库、编译选项等。以下是一些常用的 Android.mk 变量及其用途:

常用变量

  1. 模块名称

    • LOCAL_MODULE: 模块的名称,必须唯一。
      LOCAL_MODULE := mymodule
  2. 源文件

    • LOCAL_SRC_FILES: 指定模块的源文件列表。
      LOCAL_SRC_FILES := main.c myfunc.c
  3. C/C++ 标志

    • LOCAL_CFLAGS: C 编译器标志。
      LOCAL_CFLAGS := -Wall -Wextra
    • LOCAL_CPPFLAGS: C++ 编译器标志。
      LOCAL_CPPFLAGS := -std=c++11
    • LOCAL_C_INCLUDES: 指定额外的头文件搜索路径。
      LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
    • LOCAL_SHARED_LIBRARIES: 指定模块依赖的共享库。
      LOCAL_SHARED_LIBRARIES := libfoo libbar
    • LOCAL_STATIC_LIBRARIES: 指定模块依赖的静态库。
      LOCAL_STATIC_LIBRARIES := libfoo_static
    • LOCAL_LDLIBS: 链接器标志,通常用于链接系统库。
      LOCAL_LDLIBS := -llog -lz
  4. 输出类型

    • LOCAL_MODULE_CLASS: 模块的类别,如 SHARED_LIBRARIESSTATIC_LIBRARIESEXECUTABLES
      LOCAL_MODULE_CLASS := SHARED_LIBRARIES
    • LOCAL_MODULE_SUFFIX: 模块的文件扩展名。
      LOCAL_MODULE_SUFFIX := .so
  5. 路径和文件

    • LOCAL_PATH: 当前目录的路径,通常在每个 Android.mk 文件的开头定义。
      LOCAL_PATH := $(call my-dir)
    • LOCAL_SRC_FILES: 源文件路径。
      LOCAL_SRC_FILES := $(LOCAL_PATH)/src/main.c
  6. 编译选项

    • LOCAL_ARM_MODE: 指定 ARM 模式(arm 或 thumb)。
      LOCAL_ARM_MODE := arm
    • LOCAL_MULTILIB: 指定多库模式(both3264)。
      LOCAL_MULTILIB := both
  7. 清理变量

    • include $(CLEAR_VARS): 清理所有本地变量,以便重新定义一个新的模块。
      include $(CLEAR_VARS)
  8. 构建规则

    • include $(BUILD_SHARED_LIBRARY): 构建一个共享库。
      include $(BUILD_SHARED_LIBRARY)
    • include $(BUILD_STATIC_LIBRARY): 构建一个静态库。
      include $(BUILD_STATIC_LIBRARY)
    • include $(BUILD_EXECUTABLE): 构建一个可执行文件。
      include $(BUILD_EXECUTABLE)
  9. 预构建模块

    • include $(PREBUILT_SHARED_LIBRARY): 包含预构建的共享库。深色版本
    • include $(PREBUILT_STATIC_LIBRARY)

示例 Android.mk 文件

以下是一个完整的 Android.mk 文件示例,展示了如何定义一个共享库模块:

# 指定当前目录
LOCAL_PATH := $(call my-dir)# 清理所有本地变量
include $(CLEAR_VARS)# 模块名称
LOCAL_MODULE := mylib# 源文件列表
LOCAL_SRC_FILES := src/myfunc.c src/main.c# 头文件搜索路径
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include# C 编译器标志
LOCAL_CFLAGS := -Wall -Wextra# 链接器标志
LOCAL_LDLIBS := -llog -lz# 依赖的共享库
LOCAL_SHARED_LIBRARIES := libfoo libbar# 构建一个共享库
include $(BUILD_SHARED_LIBRARY)

总结

Android.mk 文件通过一系列变量来定义模块的属性和依赖关系。


http://www.ppmy.cn/embedded/141576.html

相关文章

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪,并用Matlab软件仿真。 (1)给图像加入均值为0,方差为0.02的高斯噪声,分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…

AI 编译器学习笔记之十三 -- Pytorch 特性实现

1、实现torch中的平铺特性 tile 的代码实现:Add support for aten.tile operator(not e2e support) by georgeuser Pull Request #2246 llvm/torch-mlir (github.com) torch.tile — PyTorch 2.5 documentation

U-Mamba/PyTorch WSL环境配置

Mamba的配置要求 LinuxNVIDIA GPUPyTorch 1.12CUDA 11.6https://github.com/state-spaces/mamba 个人版本: 通过Windows中的WSL来实现linux环境CUDA 12.4PyTorch 2.5.1Python 3.9 1、下载并配置WSL 微软应用商店搜索wsl选择合适的ubuntu版本进行下载在主板Bios…

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端 管理的服务器大部分都是CentOS操作系统,版本主要是CentOS 7。因为监控服务器需要,要在前两天搭建的Zabbix 7.0系统上把这些CentOS 7系统都监控起来。因为服务器数量众多,而且有些服务器…

深度学习:完整的模型训练流程

深度学习:完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导,让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环,以及模…

2024年12月计划(ue5太阳系+ue独立游戏+freex+GPU精粹泛读催眠)

根据以往, 如果周一到周四白天 一,UE5太阳系每天一节,原因是尽可能地接手外包的源码,全职去做UE,提高核心竞争力。剩下26节,868分钟。如果按照每天10分钟,显然是不够的。分5周进行,…

Elasticsearch:Retrievers 介绍

检索器(retrievers)是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减…

pico-sdk(八)-程序架构之自定义预处理变量

pico-sdk(八)-程序架构之自定义预处理变量 Board 配置文件中的预处理变量CMake 中的预处理变量 SDK可以使用编译时定义来配置库的行为和功能,能够对那些不太可能在运行时更改的配置(例如物理引脚)进行设置。这样做可以…