Android.mk

2020-03-25  本文已影响0人  Doctor_Xu

LOCAL_PATH

一个Android.mk文件必须以LOCAL_PATH := (call my-dir)开始 函数 my-dir由编译系统提供,它返回当前路径,即当前包含此Android.mk文件的目录。 :=用于赋值,是引用某变量的值,上面$(call my-dir)的意思是调用编译系统提供的my-dir的值,然后赋值给LOCAL_PATH。

CLEAR_VARS

CLEAR_VARS由编译系统提供,让GNU MAKEFILE为用户清除LOCAL_XXX的变量(例如LOCAL_MODULE, LOCAL_STATIC_LIBRARIES等),虽然它可以清除许多LOCAL_XXX的定义,但是不会清除LOCAL_PATH变量的定义,可以简单理解为:如果清除成功,则编译系统根本就找不到需要编译的对象。
用法:include $(CLEAR_VARS)

LOCAL_MODULE

此变量必须要定义,以标识此Android.mk文件所要编译的某个模块,且此名称必须是唯一的,如果名称不唯一,在编译时会报错,且此名称中不能包含空格。指定此名称后,编译出目标文件后,编译系统为自动为目标文件添加前缀和后缀,例如:你想编译名称为foo的共享库,则最终生成的文件名为:libfoo.so。

LOCAL_SRC_FILES

用以指定要编译的源文件路径,用户不需要列出里面的具体文件名,编译系统会自动索引出里面的文件。

使用Android.mk可生成可执行程序、动态库和静态库

1.编译出可执行程序的模板
LOCAL_PATH := (call my-dir) \#include &(CLEAR_VARS) LOCAL_SRC_FILES := main.c LOCAL_MODULE := test_exe LOCAL_C_INCLUDES := …… LOCAL_STATIC_LIBRARIES := …… LOCAL_SHARED_LIBRARIES := …… include(BUILD_EXECUTABLE)
解释:LOCAL_C_INCLUDES指定要加入的所需要包含的头文件路径
LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(.a)的名称
LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(
.so)的名称
LOCAL_MODULE表示模块最终的名称
BUILD_EXECUTABLE表示编译出可执行文件,此时就要求main.c文件中有main方法,因为main方法是程序的入口
2.编译静态库的模板
LOCAL_PATH := (call my-dir) include(CLEAR_VARS)
LOCAL_SRC_FILES:= /
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include (BUILD_STATIC_LIBRARY) 3.编译动态库的模板 LOCAL_PATH :=(call my-dir)
include (CLEAR_VARS) LOCAL_SRC_FILES:= / helloworld.c LOCAL_MODULE:= libtest_shared TARGET_PRELINK_MODULES := false \#LOCAL_C_INCLUDES := \#LOCAL_STATIC_LIBRARIES := \#LOCAL_SHARED_LIBRARIES := include(BUILD_SHARED_LIBRARY)

上一篇下一篇

猜你喜欢

热点阅读