Android中的Android.mk文件解析

来源:互联网 发布:皇甫圣华的淘宝店 编辑:程序博客网 时间:2024/06/16 11:52

1、背景介绍

        在Android JNI开发过程中,会遇到一个文件名为Android.mk的文件,这个文件包含了一些全局的信息,路径呀,编译环境呀等等信息。如果没有这个文件,或者该文件中的配置信息不正确,编译程序是无法通过的,下面我们来介绍一下这其中的实际含义。


2、文件目录

       首先我们看一下该文件在Android整体开发环境中的目录位置,这里给出一副图示说明:



3、配置文件

       这里给出笔者在搭建开发环境时候的配置文件信息,如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := uninstallLOCAL_SRC_FILES := uninstall.cLOCAL_C_INCLUDES:= $(LOCAL_PATH)/includeLOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lloginclude $(BUILD_SHARED_LIBRARY)


       截图如下所示:


4、解释说明

       我们接下来对该文件中的每一行的意思逐步解析说明一下:

LOCAL_PATH := $(call my-dir)
LOCAL_PATH定义了本地源码的路径,它是Android.mk文件中必须要定义的变量,call my-dir指定调用了my-dir宏,它是由编译系统提供的,返回Android.mk文件本身所在的路径,一般与源文件目录相同。


include $(CLEAR_VARS)
CLEAR_VARS指定让编译系统清除掉一些已经定义过的宏,这些宏的定义都是全局的。
当一个GUN MAKE在编译多个模块的时候,必须清除并重新设置他们。


LOCAL_MODULE    := uninstall
LOCAL_MODULE指定了模块的名称,即原生程序生成后的文件名。这里最终生成名为uninstall的文件


LOCAL_SRC_FILES := uninstall.c
LOCAL_SRC_FILES这里指定了C/C++源文件列表,这里只有一个uninstall.c文件


LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include
LOCAL_C_INCLUDES: 可选变量,表示头文件的搜索路径。默认的头文件的搜索路径是LOCAL_PATH目录。


LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
编译模块时要使用的附加的链接器选项。这对于使用‘-l’前缀传递指定库的名字是有用的。
 例如,LOCAL_LDLIBS := -lz表示告诉链接器生成的模块要在加载时刻链接到/system/lib/libz.so


include $(BUILD_SHARED_LIBRARY)
这里表示生成的文件类型。
BUILD_SHARED_LIBRARY表示生成动态库文件
BUILD_EXECUTABLE表示生成可执行文件
BUILD_STATIC_LIBRARY表示生成静态库


5、文件列表编写

      关于文件列表编写的具体情况,如何使用,我们可以参照如下地址:http://blog.ready4go.com/blog/2013/05/20/write-local-src-files-in-android-dot-mk-ultimate-skills/


6、自定义变量

以下是在 Android.mk中依赖或定义的变量列表,可以定义其他变量为自己使用,但是NDK编译系统保留下列变量名:
-以 LOCAL_开头的名字(例如 LOCAL_MODULE)
-以 PRIVATE_, NDK_ 或 APP_开头的名字(内部使用)
-小写名字(内部使用,例如‘my-dir’)
 如果为了方便在 Android.mk 中定义自己的变量,建议使用 MY_前缀,一个小例子:
MY_SOURCES := foo.c
ifneq ($(MY_CONFIG_BAR),)
MY_SOURCES += bar.c
endif
LOCAL_SRC_FILES += $(MY_SOURCES)
注意:‘:=’是赋值的意思;'+='是追加的意思;‘$’表示引用某变量的值。

0 0