音视频开发系列(44)NDK构建方式 ndk-build与cmake

本文介绍了Android NDK开发中ndk-build和CMake的使用,探讨了CMake如何简化Makefile的编写。内容包括Makefile的规则、Android.mk和Application.mk的解析,以及CMakeLists.txt的基础操作。通过学习,可以理解ndk-build和CMake在构建过程中的作用,以及如何在Android Studio中利用它们进行NDK编译。
摘要由CSDN通过智能技术生成

AS 2.2 +默认使用CMake进行 NDK 编译,我们这篇主要学习实践也是CMake,那么为什么要带ndk-build呐?

  1. CMake对编辑构建过程做了高级的封装,方便调用者使用,但是Cmake并不直接建构出最终的so,而是产生标准的建构文档Makefile,然后再用一般的建构方式使用。

  2. 早期的项目有些Makefile和cmakelists.txt都存在。我们至少有能看懂Makefile。

为什么需要makefile?

要回答这个问题,就要了解so是如何生成的?步骤如下

  1. 预处理:宏展开,宏替换,展开include gcc -E -o xxx.i xxx.c

  2. 预编译:gcc检查代码的规范性,把代码编译成汇编 gcc -S -o xxx.s xxx.i

  3. 汇编: 把.s汇编文件编译成.o二进制文件 gcc -c -o xxx.o xxx.s

  4. 链接:链接其他so,合并数据段 gcc -o xxx xxx.o

涉及到多个文件多个目录的编译时,要对所有的文件执行上述操作,如果某个文件发生变化,要做到相关联的文件重新编译链接,更是十分麻烦,而makefile的出现就是解决这一痛点,通过makefile配置和规则,实现编译的自动化,提升效率。在AndroidStudio上可以通过配置Android.mk以及Application.mk,使用ndk-build进行编译成动态或者静态库。

一、Makefile文件解析

1.1  Makefile规则介绍

一个完整的 Makefile 中,包含了 5 个东西:显式规则、隐含规则、变量定义、指示符和注释。

显示规则

target… : prerequisites… 
【Tab】command

target:
规则的目标,通常是最后需要生成的文件名或者中间产物。可以是是.o文件,也可以是最后的可执行文件。
也可以是“伪目标”,一个make执行的动作的名称,比如 “clean”,伪规则需要用.PHONY 申明

prerequisites:
规则的依赖。生成target所需的文件名列表。

command:
规则的命令行。任意的shell或者可在shell下执行的程序。
一个规则可以有多个命令行,但每一条命令占一行。
注意:每一个命令行必须以【Tab】字符开始,它告诉make此行是一个命令行

默认的情况下,make执行的是Makefile中的第一个规则,此规则的第一个目标称
之为“最终目的”

  1. 目标文件不存在,使用其描述规则创建它;

  2. 目标文件存在,目标文件所依赖的.c 源文件、.h 文件中的任何一个比目标
    文件“更新”(在上一次 make 之后被修改)。则根据规则重新编译生成它;

  3. 目标.o 文件存在,目标.o 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值