Android.mk 编写

LOCAL_PATH:=$(call my-dir)
上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径。
Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始
以include $(BUILD_XXX)结束。






LOCAL_MODULE_TAGS := user
user:指该模块只在user版本下才编译 
eng: 指该模块只在eng版本下才编译 
tests: 指该模块只在tests版本下才编译 
optional:指该模块在所有版本下都编译


LOCAL_MODULE - 编译的目标对象
LOCAL_SRC_FILES - 编译的源文件
LOCAL_C_INCLUDES - 需要包含的头文件目录,LOCAL_C_INCLUDES中加入所需要包含的头文件路径
LOCAL_SHARED_LIBRARIES - 链接时需要的外部库
LOCAL_PRELINK_MODULE - 是否需要prelink处理
BUILD_SHARED_LIBRARY - 指明要编译成动态库,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称
LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称

BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译

需要注意的是把PRELINK_MOUDULE设置成false 否则需要重新做成img文件再烧入。 

LOCAL_PRELINK_MODULE 
        Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销, 
是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的 
动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。 
        动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接 
动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间 
利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序 
启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。 
        Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保 
证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么 android framework代码一改动, 
这时候就会导致相关的应用程序重新被编译。 
这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。 
-------------------- 
变量设置为false那么将不做prelink操作 
LOCAL_PRELINK_MODULE := false 
默认是需要prlink的,同时需要在 build/core/prelink-linux-arm.map 中加入 
libhellod.so      0x96000000 
这个map文件好像是制定动态库的地址的,在前面注释上面有一些地址范围的信息,注意库与库之间的间隔数, 
如果指定不好的话编译的时候会提示说地址空间冲突的问题。另外,注意排序,这里要把数大的放到前面去, 
按照大小降序排序
简单了解:http://www.eefocus.com/article/09-04/71629s.html




LOCAL_CFLAGS 为C/C++编译器定义额外的标志(如宏定义)





你可能感兴趣的:(Module,嵌入式,Build,Path,include,library)