首页 >> 大全

二、Android.mk语法详解

2023-08-04 大全 28 作者:考证青年

我们还是采用的开发板来学习.mk

NOTED: 在编译之前,我们需要 & lunch

build/.sh

lunch -

或者lunch后选择41

一、.mk介绍

.mk是提供的一种文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握.mk的语法规范。

LOCAL_PATH := $(call my-dir)  
include $(CLEAR_VARS)  
................  
LOCAL_xxx       := xxx  
LOCAL_MODULE    := hello-jni  
LOCAL_SRC_FILES := hello-jni.c  
LOCAL_xxx       := xxx  
................  
include $(BUILD_SHARED_LIBRARY)

变量制定了该.mk的路径,$(call my-dir)调用NDK内部的函数获得当前.mk文件的路径

$()清空了除了之外的所有变量的值

省略号中间就是对于模块参数的设置,主要包括:模块名字、模块源文件、模块类型、编译好的模块存放位置、以及编译的平台等

$()执行NDK的默认脚本,它会收集 $()脚本后所有定义的变量,然后根据它们来生成模块。

二、.mk语法详解

:= $(call my-dir)

每个.mk文件必须以定义为开始。它用于在开发tree中查找源文件。宏my-dir 则由Build 提供。返回包含.mk的目录路径。

$()

变量由Build 提供。并指向一个指定的GNU ,由它负责清理很多.

例如:, , ES等等。但不清理.

这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。

:= hello-jni

模块必须定义,以表示.mk中的每一个模块。名字必须唯一且不包含空格。Build 会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成.so. 但请注意:如果模块名被定为:.则生成.so. 不再加前缀

英语语法详解__英语主语从句语法详解

:=$() 指定最后生成的模块的目标地址

:根文件系统,路径为out////root

:文件系统,路径为out////

:data文件系统,路径为out////data

除了上面的这些,NDK还提供了很多其他的变量,用于将生成的模块拷贝到输出目录的不同路径,默认是

:= hello-jni.c

变量必须包含将要打包如模块的C/C++ 源码。不必列出头文件,build 会自动帮我们找出依赖文件。缺省的C++源码的扩展名为.cpp. 也可以修改,通过

$()

:是Build 提供的一个变量,指向一个GNU 。

它负责收集自从上次调用 $() 后的所有信息。并决定编译为什么。

:编译为静态库。

:编译为动态库

:编译为 C可执行程序

:该模块已经预先编译

NDK还定义了很多其他的变量,它们用来指定模块的生成方式。

三. .mk实战 1.编译静态库

首先我们把下创建一个Study的目录,然后再Study创建一个test1的目录,tree如下:

我们的目标是把test.c编译成一个静态库

test.c代码如下:

#include int test(void)
{printf("hello Androoid.mk\r\n");return 0;
}

_英语语法详解_英语主语从句语法详解

.mk代码如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := test.c
LOCAL_MODULE := test1
include $(BUILD_STATIC_LIBRARY)

编译方法:

方法1:在 跟目录下敲指令:make test1

方法2:在/Study/test1目录下敲指令mm

注意:两个方法都需要先 build/.sh -> lunch选择41

test.a生成在out///////test1.a

NOTED:我们发现生成的并不是.a,而是test1.a,这个要注意下

2.编译动态库

首先我们把下创建一个Study的目录,然后再Study创建一个test2的目录,tree如下:

我们的目标是把test.c编译成一个静态库

test.c代码如下:

#include int test(void)
{printf("hello Androoid.mk\r\n");return 0;
}

.mk代码如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := test.c
LOCAL_MODULE := test2
include $(BUILD_SHARED_LIBRARY)

编译方法:

方法1:在 跟目录下敲指令:make test2

方法2:在/Study/test2目录下敲指令mm

注意:两个方法都需要先 build/.sh -> lunch选择41

test.so生成在out///////test2.so

NOTED:我们发现生成的并不是.so,而是test2.so,这个要注意下

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了