android NDK的android.mk文件的详解

[xhtml]  view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE    :tun  
  6.   
  7. LOCAL_SRC_FILES :tunemu.c tun.c  
  8.   
  9. LOCAL_CFLAGS := /  
  10. -I/home/xuxin/mylib/android-platform_external_libpcap/jni  
  11.   
  12. LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lpcap -L/home/xuxin/mylib/android-platform_external_libpcap/libs/armeabi  
  13.   
  14. include $(BUILD_SHARED_LIBRARY)  

1 LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径。

 

include $(CLEAR_VARS)的作用是清除一些变量的值,但是LOCAL_PATH除外。

 

LOCAL_MODULE是用来指定当前待编译模块的名称,在示例中的模块名称为hello-jni

 

LOCAL_SRC_FILES是用来指定参与编译的源代码文件。这里只编译hell0-jin.c

 

include $(BUILD_SHARED_LIBRARY)是用来指示将当前模块编译为共享库,前缀为lib,后缀为.so。

还有另外一个BUILD_STATIC_LIBRARY,是用来指示将当前模块编译为静态库的,前缀为.a,后缀为.a。

 

这就是一个最简单的Android.mk的结构。可能还有另外一点需要介绍:

 

2、定义多个Android.mk文件。

有的时候,需要编译的模块比较多,我们可能会将对应的模块放置在相应的目录中,这样,我们可以在每个目录中定义对应的Android.mk文件(类似于上面的写法),最后,在根目录放置一个Android.mk文件,内容如下:

 include $(call all-subdir-makefiles) 

只需要这一行就可以了,它的作用就是包含所有子目录中的Android.mk文件

 

3、也可以在一个Android.mk文件里包含多个模块。

很直观的想法就是将第一个Android.mk文件的内容复制一份,然后修改。我最开始也是这样做的,但是后来出现问题了,在第二个模块中的源码找不到,最后还是看文档,发现里面已经有示例解释了:

  LOCAL_PATH := $(call my-dir)

 

 IMPORTANT NOTE: Due to the way GNU Make works, this really returns
    the path of the *last* *included* *Makefile* during the parsing of
    build scripts. Do not call my-dir after including another file.

 

大意是:基于GNU make的工作方式,$(call my-dir)会返回在解析build脚本时,遇到的最后一个 include中涉及的目录。

 

所以,很多时候,在这个Android.mk里面只需要调用一次$(call my-dir)就够了,如果所有的源文件都在一个目录中。

 

如果需要的话,可以在第一次调用call my-dir的时候,将值保存下来,比如:

MY_LOCAL_PATH := $(call my-dir)  

LOCAL_PATH := $(MY_LOCAL_PATH)

 

然后,在另外一个模块中,继续如下定义:

 LOCAL_PATH := $(MY_LOCAL_PATH)

 

4,有时候我们需要引入第三方库文件,就需要配置

LOCAL_CFLAGS := /
-I/home/xuxin/mylib/android-platform_external_libpcap/jni


LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lpcap -L/home/xuxin/mylib/android-platform_external_libpcap/libs/armeabi

这两个变量,LOCAL_CFLAGS := 主要是引用外部的C头文件, -I 是头文件的存放路径,如果该头文件和我们自己的源文件放在同一级目录,则不需要配置;

LOCAL_LDLIBS := 是引用外部库文件,-L是指定该lib文件的存放路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值