Android.mk 语法和变量介绍

本文介绍了Android.mk文件的基本语法和常用变量,包括LOCAL_PATH、LOCAL_MODULE、CLEAR_VARS、LOCAL_SRC_FILES等,讲解了如何定义模块类别、安装路径、编译选项以及依赖库,帮助开发者理解Android NDK构建过程。
摘要由CSDN通过智能技术生成

一、简介

Android.mk 是一种脚本语言,是将 C/C++ 源文件粘合至 NDK 的构建文件。
官网对Android.mk的介绍如下:

假设一个算法的根目录名字叫eptz 其目录结构如下:

eptz.
| 
├── build  (android编译的mk文件配置,此文档主要讲解Android.mk配置)
│   ├── android
│     └── Android.mk      
├── camxchinodeeptz.cpp (eptz算法的.cpp文件,主要是通过高通memcpy算法更改过来的,也是我们主要实现的功能)
├── camxchinodeeptz.h   (eptz算法的.h文件,主要是通过高通memcpy算法更改过来的,也是我们主要实现的功能)
├── TS_HeadDetector   (eptz算法所需要引入的三方算法库的库名字)
│   ├── inc   
│   │   └── TCHeadDetector_VC.hZ (三方算法库的头文件)
│   ├── lib
│       ├── v7  (三方算法库32 提供的so)
│       │   ├── libc++_shared.so
│       │   ├── libtc_headdetector.so
│       │   └── libtensorflowlite_gpu.so
│       └── v8   (三方算法库64 提供的so)
│           ├── libc++_shared.so
│           ├── libtc_headdetector.so
│           └── libtensorflowlite_gpu.so     
├── TS_LDC  (第二个三方算法库)
    └── C626
        └── tsldc
            ├── inc
            │   ├── tsldcdefine.h
            │   └── tsldc.h
            ├── lib
            │   └── libtsldc.so
            ├── lib64
            │   └── libtsldc.so
            ├── tsldc4k.bin
            └── tsldc720p.bin

二、一些超级基本的语法

# call 是调用一个系统提供的宏函数,此处是 my-dir
# $() 是取值
# := 是赋值
LOCAL_PATH := $(call my-dir)
 
# 我们也可以使用 ifeq 和 ifneq 进行条件判断
ifeq ($(HOST_OS, linux)
    ...(省略)
else
    ...(省略)
endif
 
# 使用 := 是赋值,当某一行很长时,可以使用反斜杠 \ 换行,反斜杠可以追加多个源文件
LOCAL_SRC_FILES := adb.c \
                   utils.c
 
# 使用 += 是附加
LOCAL_SRC_FILES += $(USB_SRCS)

三、常用变量名

1. LOCAL_PATH := $(call my-dir)

每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。系统提供的宏函数my-dir返回包含Android.mk所在的目录路径。它不会被 CLEAR_VARS 清除,写法也很固定,即:LOCAL_PATH := $(call my-dir)

2.include $(CLEAR_VARS)

CLEAR_VARS 变量由系统提供并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH. 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。

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

4.LOCAL_MODULE_CLASS

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值