本文转载至http://blog.csdn.net/sgz_china/article/details/8448156转载请保留原文链接
Android.mk文件的写法:
---------- cut here ------------------ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) ---------- cut here ------------------
现在,让我们解释一下这几行: LOCAL_PATH := $(call my-dir) 一个Android.mk文件的开头必须LOCAL_PATH变量的定义。它是用来在开发树中查找源文件。在这个例子中,宏功能“my-dir”,提供构建系统,用于返回在当前目录(即该目包含的路径Android.mk文件本身)。 $(CLEAR_VARS) 通过构建系统和点到CLEAR_VARS变量特殊的GNU Makefile文件,这个文件中将清除许多LOCAL_XXX的变量为你(例如LOCAL_MODULE ,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等等。),与除LOCAL_PATH。这是必要的,因为所有的建设控制文件都在一个单一的GNU Make的执行上下文分析所有的变量。 LOCAL_MODULE:= HELLO-JNI LOCAL_MODULE变量必须被定义来确定每个模块,你描述在你的Android.mk。该名称必须是*独特的和不包含任何空格。需要注意的是,构建系统会自动添加适当的相应的生成的文件的前缀和后缀。换言之,一个命名为'foo'的共享库模块将产生'libfoo.so“。 重要注意事项: 如果你的名字你的模块libfoo的,构建系统不会添加另一种的'lib'前缀,并会生成libfoo.so。这是为了支持Android.mk文件,源于Android平台。 LOCAL_SRC_FILES:= HELLO-jni.c LOCAL_SRC_FILES变量必须包含C和/或C + +源文件的列表文件将被建造和组装到模块中。需要注意的是,你应该没有列出头文件和包含的文件,因为生成系统将 自动为你建立链接,只列出源文件将被直接传递给编译器即可。 需要注意的是C + +源文件的默认扩展名是“.CPP。这是 然而,可以通过定义变量指定一个不同的LOCAL_CPP_EXTENSION。不要忘了最初的“.”(即“.CXX”,而不是“CXX”)。 $(BUILD_SHARED_LIBRARY) BUILD_SHARED_LIBRARY是由编译系统提供的一个变量,即一个GNU Makefile脚本,负责收集所有的中定义的LOCAL_XXX变量,因为最新的信息“include $(CLEAR_VARS)”,并决定建立什么,以及如何做到这一点。还有BUILD_STATIC_LIBRARY生成静态库。也就是说:include $(BUILD_SHARED_LIBRARY)与include $(BUILD_STATIC_LIBRARY)将决定当前的库以共享方式还是静态的方式来创建
在一个Android.mk中可定义多个库,结构如下:
include $(CLEAR_VARS) LOCAL_MODULE := native LOCAL_SRC_FILES := native.c include $(BUILD_SHARED_LIBRARY)
除此(LOCAL_MODULE)之外, 在开发中还可以通过include方式来引入其它的mk文件来进行模块化