您的位置:首页 > 移动开发 > Android开发

Android.mk 介绍

2017-02-10 17:29 295 查看
一个最简单的Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello_exe

LOCAL_SRC_FILES := main.c

include $(BUILD_EXECUTABLE)

注释:

LOCAL_PATH变量用于在开发树中查找源文件,宏函数‘my-dir’,由编译系统提供,用于返回当前源码路经

CLEAR_VARS: 由编译系统提供,表示清楚许多LOCAL_XXX变量

LOCAL_MODULE:变量必须定义,以标识你在Android.mk文件中描述的每个模块,也可以理解为编译后的目标文件的名字,即main.c会编译成可执行程序hello_exe

LOCAL_SRC_FILES: 变量指定需要编译的源文件 

如果要静态编译可执行程序,那么可以加如下:

LOCAL_FORCE_STATIC_EXECUTABLE  := true

编译链接库:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libhello

LOCAL_SRC_FILES := main.c

TARGET_PRELINK_MODULES := false

LOCAL_C_INCLUDES := $(INCLUDES)

include $(BUILD_SHARED_LIBRARY)

如果想编译成静态库,只需把

BUILD_SHARED_LIBRARY 替换成

BUILD_STATIC_LIBRARY

prebuilt(预编译):将已经编译好的文件编译进目标文件系统中,文件内容不会发生改变,只是存放路径发生改变。

方法:

include $(BUILD_PREBUILT)

ACP方法

1, include $(BUILD_PREBUILT)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := src_path/XXX

LOCAL_MODULE := dst_path/XXX

LOCAL_MODULE_TAGS := eng

include $(BUILD_PREBUILT)

#prebuilt example

#install a apk to system/apps

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := GfanMobile.apk

LOCAL_MODULE_TAGS := user

LOCAL_MODULE_CLASS := APPS

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

2, ACP

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

file := $(TARGET_OUT_KEYLAYOUT)/s3c-button.kl

ALL_PREBUILT += $(file) <==这个必须,可以放在下面统一管理预处理,user to make the
dependency on acp

$(file): $(LOCAL_PATH)/s3c-button.kl | $(ACP)
$(transform-prebuilt-to-target)

$(transform-prebuilt-to-target)之前要有个TAB键

example;

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := bcm4330.ko

file := $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)

ALL_PREBUILT += $(file)

$(file) : $(LOCAL_PATH)/$(LOCAL_MODULE) | $(ACP)
$(transform-prebuilt-to-target)

编译产生的中间文件

 可执行程序,动态库和静态库生成的文件分别再:
out/target/product/*/obj/EXECUTABLE
out/target/product/*/obj/STATIC_LIBRARY
out/target/product/*/obj/SHARED_LIBRARY

其目标的文件夹分别为:
XXX_intermediates
XXX_shared_intermediates
XXX_static_intermediates

XXX为模块 LOCAL_MODULE定义的名字

以上使用了大量的宏,实际android系统中还有很多类似的宏

LOCAL_MODULE    → 编译的目标对象

LOCAL_SRC_FILES → 编译的源文件

LOCAL_C_INCLUDES →  需要包含的头文件目录

LOCAL_SHARED_LIBRARIES → 链接时需要的外部库

LOCAL_PRELINK_MODULE → 是否需要prelink处理

LOCAL_JAVA_LIBRARIES → 加入jar包

LOCAL_PACKAGE_NAME → java 应用程序的名字用改变量定义

LOCAL_PATH → 编译时的目录

include $(CLEAR_VARS) → 清楚之前的一些系统变量

BUILD_SHARED_LIBRARY → 指明要编译成动态库

BUILD_HOST_STATIC_LIBRARY → 指明要编译成主机端静态库

BUILD_STATIC_LIBRARY → 指明要编译成静态库

BUILD_HOST_SHARED_LIBRARY → 指明要编译成主机端动态库

BUILD_EXECUTABLE → 指明要编译成可执行文件

BUILD_HOST_EXECUTABLE → 指明要编译成主机端可执行文件

BUILD_PACKAGE → 指明要编译成apk

BUILD_HOST_PREBUILT → 指明要编译成主机端预编译文件

BUILD_PREBUILT → 指明要编译成预编译文件

BUILD_JAVA_LIBRARY -->指明要编译成动态jar包

BUILD_STATIC_JAVA_LIBRARY → 指明要编译成静态jar包

BUILD_HOST_JAVA_LIBRARY → 指明要编译成主机端jar包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: