您的位置:首页 > 移动开发 > Android开发

android中。makefile和.mk文件简单介绍

2015-09-17 10:15 591 查看
1.LOCAL_PATH := $(call my-dir)

每个Android.mk文件必须以LOCAL_PATH开头,在整个开发中,它通常别用做定位资源文件,例如,功能宏“my-dir提供给编译系统当前的路径。

2.include $(CLEAR_VARS)

这个CLEAR_VARS变量是指,编译系统提供一个特殊的GUN MakeFile来为你清除所有的LOCAL_XXX变量,LOCAL_PATH不会被清除。使用这个变量是因为在编译系统时,所有的控制文件都会在一个GUN Make上下文进行执行,而在此上下文中所有的LOCAL_XXX都是全局的。

3.LOCAL_MODULE := hello-jni

在Android.mk文件中,LOCAL_MODULE变量是为了确定每一个模块的模块名,并且必须要定义。这个名字必须是唯一的同时不能含有空格。注意,在编译系统的生成文件时,会自动的为文件添加适当的前缀或后缀,例如:一个动态库的模块名为“foo”它将会生成一个名为“libfoo.so”文件。

重要提示:如果你的模块名叫“libfoo”编译系统将不会为此模块添加“lib”前缀,它也会生成一个名为“libfoo.so”文件,这是Android平台中Android.mk文件的使用规则。

4.LOCAL_SRC_FILES := hello-jni.c

这个LOCAL_SRC_FILES变量必须包含一系列被编译进模块的C 或C++资源文件,这里你不能包含文件的标题,编译系统将会自 动的进行计算依赖,你只需列出要传给编译器的资源文件即可。

注意:C++源文件的默认扩展名问.cpp,但它能通过变量 LOCAl_CPP_EXIENSION来指定其他的扩展名。

5.include $(BUILD_SHARED_LIBRARY)

编译系统提供BUILD_SHARED_LIBRARY变量是为了指明一个GUN Makefile脚本,并且收集从最近“include$(CLEAR_VARS)”下的所有LOCALL_XXX变量的信息,最后告诉编译系统如何正确的进行编译。变量BUILD_SHARED_LIBRARY将会生成一个静态库hello-jni.a文件。

下面是一个小例子:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello-jni

LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

Android.mk中的功能宏

1.my-dir

获得当前 Android.mk所在的目录路径

2.all-subdir-makefiles

获得一个位于当前'my-dir'路径的子目录列表中所有的Android.mk路径

例如,看下面的目录层次:

  sources/foo/Android.mk

  sources/foo/lib1/Android.mk

  sources/foo/lib2/Android.mk

  如果 sources/foo/Android.mk包含一行:

  include $(call all-subdir-makefiles)

  那么它就会自动包含 sources/foo/lib1/Android.mk 和

  sources/foo/lib2/Android.mk

  这项功能用于向编译系统提供深层次嵌套的代码目录层次。注意,在默认情况下,NDK将会只搜索在 sources/*/Android.mk中的文件。

3.this-makefile

获得当前 Makefile的路径(即这个函数调用的地方)

4.parent-makefile

获得调用树中父Makefile路径。即包含当前Makefile的Makefile路径。

5.import-module

功能是,允许你通过name查找到包含Android.mk的另一个模块例如: $(call import-module,<name>)

6.grand-parent-makefile

获得条用树中根MakeFile路径。
http://www.360doc.com/content/13/1205/11/9171956_334636510.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: