首页 > 系统 > Android > 正文

Android.mk 介绍

2019-11-09 13:55:31
字体:
来源:转载
供稿:网友
一个最简单的Android.mk:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello_exeLOCAL_SRC_FILES := main.cinclude $(BUILD_EXECUTABLE)注释:LOCAL_PATH变量用于在开发树中查找源文件,宏函数‘my-dir’,由编译系统提供,用于返回当前源码路经CLEAR_VARS: 由编译系统提供,表示清楚许多LOCAL_XXX变量LOCAL_MODULE:变量必须定义,以标识你在Android.mk文件中描述的每个模块,也可以理解为编译后的目标文件的名字,即main.c会编译成可执行程序hello_exeLOCAL_SRC_FILES: 变量指定需要编译的源文件 如果要静态编译可执行程序,那么可以加如下:LOCAL_FORCE_STATIC_EXECUTABLE  := true编译链接库:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := libhelloLOCAL_SRC_FILES := main.cTARGET_PRELINK_MODULES := falseLOCAL_C_INCLUDES := $(INCLUDES)include $(BUILD_SHARED_LIBRARY)如果想编译成静态库,只需把BUILD_SHARED_LIBRARY 替换成BUILD_STATIC_LIBRARYprebuilt(预编译):将已经编译好的文件编译进目标文件系统中,文件内容不会发生改变,只是存放路径发生改变。方法:include $(BUILD_PREBUILT)ACP方法1, include $(BUILD_PREBUILT)LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := src_path/XXXLOCAL_MODULE := dst_path/XXXLOCAL_MODULE_TAGS := enginclude $(BUILD_PREBUILT)#prebuilt example#install a apk to system/appsLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := GfanMobile.apkLOCAL_MODULE_TAGS := userLOCAL_MODULE_CLASS := APPSLOCAL_SRC_FILES := $(LOCAL_MODULE)include $(BUILD_PREBUILT)2, ACPLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)file := $(TARGET_OUT_KEYLAYOUT)/s3c-button.klALL_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.kofile := $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)ALL_PREBUILT += $(file)$(file) : $(LOCAL_PATH)/$(LOCAL_MODULE) | $(ACP)$(transform-prebuilt-to-target)编译产生的中间文件 可执行程序,动态库和静态库生成的文件分别再:out/target/product/*/obj/EXECUTABLEout/target/product/*/obj/STATIC_LIBRARYout/target/product/*/obj/SHARED_LIBRARY其目标的文件夹分别为:XXX_intermediatesXXX_shared_intermediatesXXX_static_intermediatesXXX为模块 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 → 指明要编译成apkBUILD_HOST_PREBUILT → 指明要编译成主机端预编译文件BUILD_PREBUILT → 指明要编译成预编译文件BUILD_JAVA_LIBRARY -->指明要编译成动态jar包BUILD_STATIC_JAVA_LIBRARY → 指明要编译成静态jar包BUILD_HOST_JAVA_LIBRARY → 指明要编译成主机端jar包
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表