学习Android NDK MakeFile

本文详细介绍了Android NDK中的Application.mk和Android.mk两个核心文件的作用及配置方法。Application.mk负责全局性的描述,如编译平台和优化选项;Android.mk则针对特定模块,包括指定模块名称、源代码文件和头文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了之后再次查阅的方便,根据两位前辈的经验将其整合到了一起,之后可能也会修改,在此注明本文根据以下两处的文章进行改编,如有侵权等地方请联系本人。

根据这两篇进行学习和总结的:https://blog.youkuaiyun.com/qq_31387043/article/details/50899589

https://www.jianshu.com/p/c2c23690818f

NDK MakeFile介绍

NDK中的MakeFile有Application.mk和Android.mk两个文件组成。
Application.mk是对整个项目的全局性描述,比如编译的平台,编译的优化选项等;

Android.mk是项目中某一个模块的编译脚本,在其中指定Module的名称,需要编译的代码文件,以及需要包含的头文件等。

Application.mk

APP_ABI

指明编译与调试的CPU架构。以下是列出的常用的几种:

CPU架构ABI 
ARMv5armeabi32位,从2010年
ARMv7armeabi-v7a32位,从2010年
x86x8632位,从2011年
MIPSmips32位,从2012年
ARMv8arm64-v8a64位,从2014年
MIPS64mips6464位,从2014年
x86_64x86_6464位,从2014年

 

 APP_PROJECT_PATH
指定项目的路径,一般我们的项目是放在jni目录下的,可以不用指定。

APP_BUILD_SCRIPT
指定NDK编译脚本的文件名称,如果编译脚本名称为Android.mk, 可以不用指定。

 

 

 

Android.mk

LOCAL_PATH := $(call my-dir)
设置当前的代码路径,LOCAL_PATH指向Android.mk所在的目录

include $(CLEAR_VARS)
清除LOCAL_xxx指定的变量,清理后才能避免多个模块相互影响

LOCAL_MODULE := test
指定当前模块的名称为test,生成后的文件为libtest.so

LOCAL_SRC_FILES := test.c
指定需要编译的源码文件,不需要列出头文件。网友写的LOCAL_SRC_FILES的技巧:https://blog.youkuaiyun.com/qq_17387361/article/details/52698519

include $(BUILD_SHARED_LIBRARY)
编译生成动态链接库

include $(CLEAR_VARS)
用于重置除LOCAL_PATH变量外的,所有LOCAL_XXX系列变量。

LOCAL_LDLIBS := -Lxxx -la -lb
设置需要链接的动态库,a和b是库名字 xxx是库所在的路径

LOCAL_EXPORT_LDLIBS := -lz 
导出模块依赖关系

LOCAL_SHARED_LIBRARIES:=module_name #指定动态库
LOCAL_STATIC_LIBRARIES:=module_name #指定静态库

LOCAL_C_INCLUDES
设置头文件搜索路径

OCAL_CFLAGS += -DXXX   
相当于在所有源文件中增加一个宏定义#define XXX

LOCAL_LDFLAGS
这个编译变量传递给链接器一个一些额外的参数,比如想传递而外的库和库路径给ld,或者传递给ld linker的一些链接参数

LOCAL_PRELINK_MODULE := false
变量设置为false那么将不做prelink操作

LOCAL_MODULE_TAGS := optional
指该模块在所有版本下都编译
LOCAL_MODULE_TAGS的参数说明:

     user: 指该模块只在user版本下才编译
     eng: 指该模块只在eng版本下才编译
     tests: 指该模块只在tests版本下才编译
     optional:指该模块在所有版本下都编译

include $(BUILD_xxx_xxx)
执行NDK的默认脚本

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值