当前位置: 首页 > news >正文

Android.mk简单介绍、规则与基本格式

文章目录

    • Android.mk与makefile区别
    • Android.mk规则
    • Android.mk基本格式

Android.mk与makefile区别

Android.mk 和 Makefile 都是用于构建代码项目的构建脚本文件,但是它们在特定上下文中有一些区别:

  1. Android.mk:
    • Android.mk 是用于构建 Android 应用或库项目的构建文件,通常用于基于 Android NDK 的 C/C++ 项目。
    • Android.mk 文件采用类似 GNU Make 的语法,但有一些 Android 特定的规则和函数,比如 LOCAL_MODULEinclude $(BUILD_SHARED_LIBRARY) 等。
    • Android.mk 文件用于描述 Android 项目中的模块、库依赖关系、编译选项等。
  2. Makefile:
    • Makefile 是一个通用的构建工具文件,可用于构建各种类型的项目,不仅限于 Android 开发。
    • Makefile 使用 GNU Make 编程语言,通过指定目标、依赖关系和命令来描述构建过程。
    • Makefile 可用于编译和链接任何类型的项目,包括 C、C++、Java 等。

Android.mk规则

以下是一些常用的 Android 特定规则和函数:

  1. include $(BUILD_SHARED_LIBRARY): 包含共享库构建规则,用于构建一个共享库。
  2. include $(BUILD_STATIC_LIBRARY): 是一个规则,包含静态库构建规则,用于构建一个静态库
  3. include $(PREBUILT_STATIC_LIBRARY) :是一个变量,用于引用预先编译好的静态库文件。通过使用 PREBUILT_STATIC_LIBRARY 变量,可以将预先编译好的静态库文件包含到当前 Android.mk 文件中,以便在编译链接过程中使用该静态库。
  4. include $(BUILD_EXECUTABLE):是一个规则,用于构建一个可执行文件(executable)
  5. LOCAL_PATH:一个常用的变量,用于表示当前 Android.mk 文件所在的目录路径。在 Android 开发中,通常会使用 LOCAL_PATH 变量来获取当前 Android.mk 文件所在的路径,方便在定义模块属性时引用该路径。
  6. include $(CLEAR_VARS):CLEAR_VARS变量是生成系统提供的,它指向一个特殊的GNU Makefile.这个Makefile将会为你自动清除许多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等),但LOCAL_PATH是例外,它不会被清除。这些变量的清除是必须的,因为所有的控制文件是在单一的GNU make执行环境中解析的,在这里所有的变量都是全局的。
  7. LOCAL_MODULE: 指定当前模块的名称。
  8. LOCAL_SRC_FILES: 指定当前模块的源文件列表。
  9. LOCAL_C_INCLUDES: 指定当前模块的头文件搜索路径。
  10. LOCAL_CFLAGS: 指定当前模块的 C 编译选项。
  11. LOCAL_CPPFLAGS: 指定当前模块的 C++ 编译选项。
  12. LOCAL_LDLIBS: 指定当前模块链接时需要的动态链接库(.so 文件)。可以使用 -l 参数指定需要链接的库,例如:-llog 表示链接系统日志库。
  13. LOCAL_SHARED_LIBRARIES: 指定当前共享库模块依赖的其他共享库。
  14. LOCAL_STATIC_LIBRARIES:指定当前模块依赖的静态库。注意:引用了两个有调用关系的静态库的时候,需要把其中被调用的库放在调用者的后面

Android.mk基本格式

 jni/Anroid.mk文件为NDK生成系统描述了这个共享库。它的内容为:
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE  := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------

现在,让我们逐行解释:

LOCAL_PATH := $(call my-dir)
每个Android.mk文件都必须以定义LOCAL_PATH变量开始。其目的是为了定位源文件的位置。在这个例子,生成系统提供的宏函数(macro function)‘my-dir'用来返回当前路径(即放有Android.mk文件的文件夹)
include $(CLEAR_VARS)
CLEAR_VARS变量是生成系统提供的,它指向一个特殊的GNU Makefile.这个Makefile将会为你自动清除许多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等),但LOCAL_PATH是例外,它不会被清除。
这些变量的清除是必须的,因为所有的控制文件是在单一的GNU make执行环境中解析的,在这里所有的变量都是全局的。
LOCAL_MODULE := hello-jni
为了在你的Android.mk文件标识每个组件,必须定义LOCAL_MODULE变量。这个名字必须要唯一的并且不能包含空格。注意:生成系统会自动地为相应生成的文件加入前缀或后缀。换言之,一个名叫foo的共享库组件会生成'libfoo.so'重要注意事项:如果你把组件取名为‘libfoo',生成系统将不会加上‘lib'前缀,还是生成libfoo.so。这是为了支持源于Android平台源代码的Android.mk文件。
LOCAL_SRC_FILES := hello-jni.c
LOCAL_SRC_FILES变量必须包含一系列将被构建和组合成组件的C/C++源文件。
注意:你不需要列出头文件或include文件,因为生成系统会为你自动计算出源文件的依赖关系。仅仅列出那些将直接传给编译器的源文件足矣。注意,默认的C++源文件的扩展名是‘.cpp'。但你可以通过定义LOCAL_DEFAULT_EXTENSION
来指定一个扩展名。别忘了扩展名开始的那一点(比如,‘.cxx’,能行,但‘cxx'不行)。
include $(BUILD_SHARED_LIBRARY)
生成系统提供的BUIL_SHARED_LIBRARY变量指向一个GNU Makefile脚本,这个脚本主管收集在最近的一次#include $(CLEAR_VARS)(即清除本地变量)之后你所定义的LOCAL_XXX变量的信息,并决定生成什么,如何准确的生成。
BUILD_STATIC_LIBRARY可生成一个静态库。
http://www.lryc.cn/news/353202.html

相关文章:

  • 【MySQL精通之路】InnoDB(3)-MVCC多版本管理
  • uniapp 对接 微信App/支付宝App 支付
  • cmake配置opencv与boost库
  • 【Kotlin 一】Kotlin入门知识简介、变量声明、数字类型
  • Java 微信小程序登录(openId方式)
  • 为何程序员35岁就开始被嫌弃了?程序员该如何避免中年危机?
  • 【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)
  • 【Spring Security + OAuth2】授权
  • 失落的方舟台服预下载教程 一键下载+账号注册教程
  • 【启明智显技术分享】SOM2D02-2GW核心板适配ALSA(适用Sigmastar ssd201/202D)
  • 人工智能的发展现状,AI将如何改变IT行业,哪些职业将最先失业
  • request.js使用Promise.all等待所有请求完成再进行数据赋值
  • Java开发者必知的时间处理工具:SimpleDateFormat类详解
  • 构造函数的用法
  • 环形链表Ⅱ-力扣
  • 【microros】解决 microros安装过程中的 undefined reference to `fmt::v6 问题
  • 29. 相似矩阵,若尔当型
  • 【论文阅读】 YOLOv10: Real-Time End-to-End Object Detection
  • Python读写文件
  • docker-如何将容器外的脚本放入容器内,将容器内的脚本放入容器外
  • 算法训练营第三十九天 | LeetCode 738 单调递增的数字、LeetCode 968 监控二叉树
  • Hive语法学习总结
  • 【Linux】TCP协议【中】{确认应答机制/超时重传机制/连接管理机制}
  • solidworks画螺母学习笔记
  • WebGL的医学培训软件开发
  • 新时代AI浪潮下,程序员和产品经理如何入局AIGC领域?
  • OWASP top10--SQL注入(一)
  • java —— 类与方法
  • 【MySQL精通之路】InnoDB-启动选项和系统变量
  • 嵌入式linux系统中文件系统制作方法详解