Android.mk学习记录

来源:互联网 发布:淘宝上变声器 编辑:程序博客网 时间:2024/05/01 10:31
Android.mk学习记录
ANDROID-MK.html 描述了Android.mk语法来编译用c/c++写的文件用ndk


Android.mk文件用来描绘编译源代码的,具体的:
          1、这个文件是一个真正的小的GNU makefile片段,这个文件将会被解析一次或多次
          2、这文件语法可以允许你去组织文件模块化‘modules’,每个模块可能是
                   一个静态的模块,a static library
                   一个共享模块,a shared library
          只有共享库(shared libraries)将会安装到你的应用中,静态的库可以用来生成共享库
          可以写多个Android.mk文件,每个是一个模块
          3、编译系统自动计算依赖文件

          注意:这个语法是非常接近Android平台源码的,这样做的意图是允许使用‘external’库下的源码给系统开发者




1、样例
          samples/hello-jni
                 src 下是java源码
                 jni下有本地代码 ->jni/hello-jni.c

                 其中jni/Android.mk文件如下:


                 LOCAL_PATH := $(call my-dir)

                 include $(CLEAR_VARS)

                 LOCAL_MODULE    := hello-jni


                LOCAL_SRC_FILES := hello-jni.c


                include $(BUILD_SHARED_LIBRARY)




解释:

LOCAL_PATH := $(call my-dir)

一个Android.mk文件必须开始定义一个LOCAL_PATH变量,这个变量用于定位源文件的路径,这个例子,macro(宏)宏函数 my-dir,由编译系统提供,用来返回当前的工作目录


include $(CLEAR_VARS)
CLEAR_VARS有编译系统提供,指向特定的GNU makefile,这将会清楚许多LOCAL_xxx变量,eg,LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,etc,还有LOCAL_PATH,这个是必须的,因为所有的编译控制文件被解析在一个单一的GNUmake执行上下文,这里的所有的变量都是全局变量

LOCAL_MODULE := hello-jni

LOCAL_MODULE 每个这样的变量必须唯一且没有空格,注意,系统会自动的加上前缀“lib”和“.so”,所以不必写其他的,这个生成为:libhello-jni.so


LOCAL_SRC_FILES := hello-jni.c


LOCAL_SRC_FILES 包含一系列的c/c++源文件,这些将会编译成一个模块

注意:不要列出头文件和included文件,因为编译系统讲自动计算依赖性
c++的扩展名是cpp


include $(BUILD_SHARED_LIBRARY)


BUILD_SHARED_LIBRARY 这个变量有编译系统提供,用于指向一个GNU Makefile文件,主要用于搜接所有你定义的信息,如:LCOAL_XXX 和include $(CLEAR_VARS),并且决定怎样去编译,生成一个共享库,
BUILD_STATIC_LIBRARY 生成静态库





原创粉丝点击