您当前的位置: 首页 >  android

命运之手

暂无认证

  • 4浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【NDK】【012】Android.mk语法详解

命运之手 发布时间:2020-11-24 00:10:58 ,浏览量:4

NDK编译使用到Application.mk和Android.mk两个脚本

Application.mk用于配置项目的全局选项,如果项目适配的cpuAbi,安卓的platform版本等

Android.mk则用于配置具体的代码编译规则

mk文件语法的详细介绍,可以参考谷歌的官方文档

https://developer.android.google.cn/ndk/guides/application_mk

这里简单示范下,常用的Android.mk语法规则


	#这并不是一个有效的Makefile文件,仅仅是为了演示Makefile语法
	#纯手动输入,可能会有单词拼写错误,仅供学习,不要照抄
	
	#Android.mk是在make程序基础上定义的一种脚本,它能被make程序识别并执行
	
	#Android.mk支持将若干源文件分组为一个模块,一个模块可以作为整体被其它脚本方法使用
	
	#Android.mk会自动计算头文件依赖关系,不需要手动引入头文件
	
	#指定工作目录
	#后面其它的路径,都是相对于LOCAL_PATH的路径
	LOCAL_PATH := $(call my-dir)
	
	#引入已经编译好的so文件
	
	#清理LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES等变量值
	#但不会清理LOCAL_PATH变量
	include $(CLEAR_VARS)
	#定义模块名
	LOCAL_MODULE := test
	#指定该模块包含的源码文件
	LOCAL_SRC_FILES := libtest.a
	#引入预先编译好的静态库,即a文件
	include $(PREBUILT_STATIC_LIBRARY)
	
	#CLEAR_VARS,PREBUILT_SHARED_LIBRARY这些都是Makefile内置的脚本名称
	#通过【include $(xxx)】格式的语法,可以执行这些脚本
	
	#PREBUILT_SHARED_LIBRARY 引入预编译的静态库,即so文件
	#安卓6.0以上的系统已经不支持引用一个so库,生成另一个so库,强行使用,编译出来的so库会运行异常
	#PREBUILT_STATIC_LIBRARY 引入预编译的静态库,即a文件
	#BUILD_STATIC_LIBRARY 构建生成静态库
	#BUILD_SHARED_LIBRARY 构建生成动态库
	#BUILD_EXECUTABLE 构建生成可执行文件 文件格式取决于操作系统
	
	#依赖预编译好的静态库,生成新的so库
	include $(CLEAR_VARS)
	LOCAL_MODULE := hello-jni
	LOCAL_MODULE_FILENAME := libHelloJni
	LOCAL_SRC_FILES := hello-jni.c
	LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
	LOCAL_STATIC_LIBRARIES := test
	include $(BUILD_SHARED_LIBRARY)
	
	#LOCAL_MODULE_FILENAME 指定so库名称,也可不指定,会使用默认命名规则
	
	#LOCAL_SRC_FILES 引入源文件
	#LOCAL_C_INCLUDES 引入头文件,指定头文件查找目录
	#LOCAL_STATIC_LIBRARIES 引入静态库,后面接的必须是模块名,不能使用文件路径,模块名可能定义在其它mk文件里
	
	#如果【BUILD_SHARED_LIBRARY】依赖了另一个动态库模块的话,在使用时,两个so库文件都需要放进项目,因为它的实质是在运行时去查找其它被引用的so文件
	#如果【BUILD_SHARED_LIBRARY】依赖的是静态库模块,只需要将最终的so文件放进项目即可,因为它的实质是将a文件中被用到的函数打包进so库里面
	#【BUILD_SHARED_LIBRARY】在依赖静态库时,不会将没被使用到的代码打包到so库里面,所以最终打包生成的文件体积比较小
	
	#引入其它目录下的Android.mk文件
	#寻找所有【add-path】目录,如果某个目录下存在cocos目录,并且该目录下有Android.mk文件,则引入
	$(call import-add-path, $(LOCAL_PATH)/../../cocos2d)
	$(call import-add-path, $(LOCAL_PATH)/../../cocos2d/external)
	$(call import-module, cocos)

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.1950s