1、多文件编译

多文件编译共有两种方式:

  (1) 在Android.mk中一一添加

      LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= test      #编译生成的目标名称
      LOCAL_SRC_FILES := test1.c \
                  test2.c \
                  test3.c
                #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_EXECUTABLE)   #编译之后的文件类型

  (2)在Android.mk中调用函数 

     LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= test      #编译生成的目标名称
      LOCAL_C_ALL_FILES := $(call all-c-files-under) #加载所有的文件     
      LOCAL_SRC_FILES := $LOCAL_C_ALL_FILES      
     # LOCAL_SRC_FILES := test.c    #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_EXECUTABLE)   #编译之后的文件类型

2、一个Android.mk生成多个目标文件,只需要在Android.mk下面做如下的操作

       LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= test1      #编译生成的目标名称
      LOCAL_C_ALL_FILES := $(call all-c-files-under) #加载所有的文件     
      LOCAL_SRC_FILES := $LOCAL_C_ALL_FILES      
     # LOCAL_SRC_FILES := test.c    #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_EXECUTABLE)   #编译之后的文件类型
      LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= test2      #编译生成的目标名称
      LOCAL_C_ALL_FILES := $(call all-c-files-under) #加载所有的文件     
      LOCAL_SRC_FILES := $LOCAL_C_ALL_FILES      
     # LOCAL_SRC_FILES := test.c    #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_EXECUTABLE)   #编译之后的文件类型

3、生成动态库,操作Android.mk

      LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= libtest      #编译生成的目标名称
      LOCAL_SRC_FILES := test1.c \
                  test2.c \
                  test3.c
                #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_SHARED_LIBRARY)   #编译之后的文件类型

4、生成静态库,操作Android.mk

      LOCAL_PATH:= $(call my-dir)  #定义当前模块的相对路径
      include $(CLEAR_VARS)      #清空当前环境变量
      LOCAL_MODULE:= libtest      #编译生成的目标名称
      LOCAL_SRC_FILES := test1.c \
                  test2.c \
                  test3.c
                #编译该模块所需要的源文件
     # LOCAL_MODULE_PATH:=$(LOCAL_PATH) #在当前目录生成该模块文件
      include $(BUILD_STATIC_LIBRARY)   #编译之后的文件类型

####共勉#####

安卓之Android.mk多文件以及动态库编译的更多相关文章

  1. Android.mk添加本地程序和库的经常使用模版

    Android.mk添加本地程序和库的经常使用模版 Android中添加本地程序或者库.这些程序和库与其所在路径没有关系.仅仅与它们的配置文件Android.mk有关.Android.mk文件里可以主 ...

  2. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  3. linux动态库编译和使用

    linux动态库编译和使用详细剖析 引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, ...

  4. linux动态库编译和使用详细剖析 - 后续

    引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...

  5. 动态库与静态库的学习 博主写的很好 静态库 编译的时候 需要加上 static 动态库编译ok运行不成功就按照文章中的方法修改

    来源连接   http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库 ...

  6. Android.mk各种文件编译汇总

    一.源代码编译 1.1 so预编译 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libAppArea LOCAL ...

  7. 安卓之Android.mk编写

    题记:编译环境可以参考https://www.cnblogs.com/ywjfx/p/9960817.html 不管是写C还是java,我想所有的程序员都经历过HelloWorld程序的编写,现在让我 ...

  8. Linux命令之ar - 创建静态库.a文件和动态库.so

    转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...

  9. .h头文件 .lib库文件 .dll动态库文件之间的关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

随机推荐

  1. Windows10家庭版安装docker攻略

    在公司,一直使用mac系统,在mac上安装使用docker还是比较方便的,可本人心血来朝,家里是win10 home版,就想在windows上刷一刷. 好了,废话不多说,直接上干货. 为了不误导广大爱 ...

  2. golang读写文件之Scan和Fprintf

    1. 标准输入输出 os提供了标准输入输出: Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") Stdout = NewF ...

  3. k8s pod节点调度及k8s资源优化

    一.k8s pod 在节点间调度控制 k8s起pod时,会通过调度器scheduler选择某个节点完成调度,选择在某个节点上完成pod创建.当需要在指定pod运行在某个节点上时,可以通过以下几种方式: ...

  4. SpringCloud2.0 Hystrix Ribbon 基于Ribbon实现断路器 基础教程(六)

    1.启动[服务中心]集群,工程名:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集 ...

  5. 使用TFT LCD制作Arduino触摸屏计算器

    Arduino开发板总是可以帮助我们轻松地构建一个项目,并使其看起来更具有吸引力.对一个带有触摸功能的液晶显示屏进行编程听起来可能是一件复杂的工作,但是通过使用Arduino库和扩展模块可以使得这项工 ...

  6. java代码获取项目版本号实例

    package com.hzcominfo.application.etl.settings.web.controller.highconfig; import com.hzcominfo.appli ...

  7. Centos7-新增硬盘挂载

    查看现有硬盘情况 df -h fdisk -l 查看新硬盘 ls /dev/sdb 具体操作 fdisk /dev/sdb m n #添加一个新的分区 p #创建主分区 w #保存并退出 partpr ...

  8. Centos7-网卡配置

    目标计划:熟悉Linux网卡 1.修改网卡名称,替换自动生成的网卡名 2.新建网卡配置文件与新增网卡的关系 3.网卡bond模式配置,team模式 4.NetworkManager-nmcli管理网络 ...

  9. maven 使用dependencyManagement统一管理依赖版本

    今日思语:人生方方长长,努力把她磨成方圆,所以 加油咯~ 使用maven可以很方便的进行项目依赖的管理,即可以管理我们显示引入具体版本的依赖,也可以管理某些第三方引入的一些依赖的版本,从而能更好的实现 ...

  10. hdu3625

    hdu3625 题意: 酒店发生一起谋杀案.作为镇上最好的侦探,您应该立即检查酒店的所有N个房间.但是,房间的所有门都是锁着的,钥匙刚锁在房间里,真是个陷阱!您知道每个房间里只有一把钥匙,并且所有可能 ...