Android.mk的GNU make语法

Android.mk的GNU make语法

背景

1、安卓系统编译,使用了makefile,所以学习make语法。

2、安卓Build System会收集所有的Android.mk,转换成ninja用于构建。

GNU make语法

接下来的语法,主要讲述Android.mk里怎么使用。

LOCAL_PATH:=$(call my-dir)
调用构建系统 my-dir函数,获取文本所在目录,赋值给LOCAL_PATH。LOCAL_PATH必须位于Android.mk文件最开始

include $(CLEAR_VARS)
CLEAR_VARS由构建系统提供,指的是clear_vars.mk。引用此文件,用于清除除LOCAL_PATH以外的所有LOCAL_XXX变量

LOCAL_MODULE:=xxx
定义模块名称

LOCAL_MODULE_STEM
定义编译产物的文件名,会覆盖LOCAL_MODULE的定义。如果本变量没有定义,则生成的二进制文件名使用LOCAL_MODULE

LOCAL_MODULE_PATH:=odm/etc
定义编译产物的安装路径,这里的路径指的是绝对路径,想放哪放哪。

LOCAL_MODULE_CLASS:=ETC |SHARED_LIBRARIES |APPS |EXECUTABLES
定义编译产物的安装路径,这里的路径是分类好的路径。比如ETC是放到etc目录、SHARED_LIBRARIES放到lib/lib64下、EXECUTABLES放到bin目录。

LOCAL_SRC_FILES=$(call all-subdir-java-files)
定义编译模块,用到的源文件

LOCAL_PACKAGE_NAME=xxx
一般用于表示app的package名称

LOCAL_MODULE_TAGS := user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在 所有版本下都编译,默认是optional

LOCAL_CERTIFICATE := platform
指定apk签名的key。platform 是指用platform.pk8和platform.x509.pem两个文件来签名 。用这两个key签名后apk才可以放入系统进程中;

LOCAL_C_INCLUDES:=include
指定编译时即将使用的c头文件的位置,以当前目录为起点。

LOCAL_SHARED_LIBRARIES :=libcutils
表示模块在运行时要依赖的动态库,在链接时就需要,以便在生成文件时嵌入其相应的信息。

LOCAL_CFLAGS += -DXXX
相当于在所有源文件中增加一个宏定义#define XXX,所编译的Cpp中可以使用

LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
在名为 manifest_foo.xml 的文件中,为此模块创建清单

include $(BUILD_STATIC_LIBRARY)
编译成静态库,后缀为.a。

include $(BUILD_SHARED_LIBRARY)
编译成动态库,也叫共享库,前缀为lib,后缀为.so。

include $(BUILD_EXECUTABLE)
编译成可执行程序

include $(call all-subdir-makefiles)
包含所有子目录中的Android.mk文件

include $(BUILD_PREBUILT)
将预编译好的二进制,打进模块

ifeq ($(AUDIO_POLICY_TEST),true)
  $(warning “hello android,fuck trump”)
endif

判断相等的if语句

define func1
  $(warning “hello android,fuck biden”)
endef

通过define关键字实现自定义函数func1

简单例子

  • 编译一个helloworld动态库
    • 源码文件如下:
      sources/helloworld/helloworld.c
      sources/helloworld/Android.mk
    • 其中Android.mk文件内容:
      LOCAL_PATH := $(call my-dir)
      include $(CLEAR_VARS)
      LOCAL_MODULE := helloworld
      LOCAL_SRC_FILES := helloworld.c
      include $(BUILD_SHARED_LIBRARY)

参考文章

链接: android里makefile的写法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值