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
include $(CLEAR_VARS)
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 生成静态库
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文件如下:
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
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 生成静态库