前言
最近在做系统开发,很多知识都要重新归纳和整理,最近在编写Makefile文件的时候,网上找了些文章发现这篇文章对于入门很有价值《Android系统源码Build系统入门详解》文章大部分的内容都是转载原文的,我准备整理下,放在我自己的博客下方便我自己查阅。
1.包含C的Android.mk文件
以前早期版本的时候,我们再下载NDK的时候,通常都会有一个hello-jni的用例,方便我们自己去学习和理解,由于找不到了,我这里就直接将内容贴出来。
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)
此变量指示源文件在开发树中所处的位置。在这里,构建系统提供的宏函数my-dir
将返回当前目录(Android.mk
文件本身所在的目录)的路径。
LOCAL_PATH:是Build 系统设置的系统变量,要编译一个模块,只要在编译之前根据需要设置这些变量然后执行编译即可。
常用的系统编译变量
变量名 | 说明 |
---|---|
LOCAL_SRC_FILES | 当前模块包含的所有源代码文件。 |
LOCAL_MODULE | 当前模块的名称,这个名称应当是唯一的,模块间的依赖关系就是通过这个名称来引用的。 |
LOCAL_C_INCLUDES | C 或 C++ 语言需要的头文件的路径。 |
LOCAL_STATIC_LIBRARIES | 当前模块在静态链接时需要的库的名称。 |
LOCAL_SHARED_LIBRARIES | 当前模块在运行时依赖的动态库的名称。 |
LOCAL_CFLAGS | 提供给 C/C++ 编译器的额外编译参数。 |
LOCAL_JAVA_LIBRARIES | 当前模块依赖的 Java 共享库。 |
LOCAL_STATIC_JAVA_LIBRARIES | 当前模块依赖的 Java 静态库。 |
LOCAL_PACKAGE_NAME | 当前 APK 应用的名称。 |
LOCAL_CERTIFICATE | 签署当前应用的证书名称。 |
这里我要单独提出来LOCAL_MODULE_TAGS
,表示当前模块所包含的标签。标签的值可能是 debug, eng, user,development 或者 optional。其中,optional 是默认标签。标签是提供给编译类型使用的。不同的编译类