Android Studio编译C++项目

本章目标: 学会在Android Studio中使用CMake工具编译C、C++项目代码,输出hello world, cpp

  • C++编译流程
  • C++编译器
  • make命令
  • CMake概念
  • CMake应用
  • AS JIN项目
  • 学习资源

1. C++编译流程

C/C++源代码编译成库或可执行文件需要经过4个流程:预处理编译汇编链接, 这4个流程都需要使用编译器

2. C++编译器

编译C++的编译器有很多种,其中最主要2种如下:

  • MSVC:Window平台的编译器,Visual Studio自带的C/C++编译器
  • gcc/g++: 类Unix下的标准编译器,支持众多语言,支持交叉编译。默认不支持Windows,需要第三方移植才可用于Windows。(Mac已经自带这2个编译器)

3. make命令

我们使用g++编译C++项目时,我们需要清楚每个文件的依赖顺序,然后进行编译,这样才能编译出库或可执行文件。* 但是,如果一个项目很多文件时,我们就很难直接使用g++命令编译了,因为我们要清楚依赖关系。

这时,我们可以编写makefile文件,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

make是一个指令工具,编写好c++项目的makefile文件后,执行make makefile进行编译即可。

4. CMake概念

为什么需要CMake? 因为当C++工程很大时,项目拥有者需要管理各种依赖,管理各种命名,编写makefile文件将会十分困难。大工程的makefile文件往往只有编译专家和天神看得懂。于是,某个优秀的程序员看不下去了,创造了CMake。

4.1 CMake是什么

CMake是一个跨平台的安装(编译)工具, 可以用简单的配置语句来描述所有平台的安装(编译过程)。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

4.2 CMake基本语法

CMake有很多基本语法,用来配置编译选项,以下为部分介绍

  • 变量定义与消息打印
# 变量名为 var,值为 hello
set(var hello)

# 引用 var 变量
${var}

# 通过message打印信息
message(${var})
  • 字符串操作
# 将字符串全部大写
string(TOUPPER ${var} result)
message(${result})

# 求字符串的长度
string(LENGTH ${var} num)
message(${num})
  • 文件操作
# 文件重命名
file(RENAME "test.txt" "new.txt")
  • 预定义的常量
CMAKE_CURRENT_SOURCE_DIR 指当前 CMake 文件所在的文件夹路径
CMAKE_SOURCE_DIR  指当前工程的 CMake 文件所在路径
CMAKE_CURRENT_LIST_FILE 指当前 CMake 文件的完整路径
PROJECT_SOURCE_DIR  指当前工程的路径

5. CMake应用

  • 5.1 安装CMake和配置CMake环境变量
  • 5.2 配置CMake工程
5.1 安装CMake和配置CMake环境变量
  • 安装方式1: 去官网下载安装
  • 安装方式2: 可通过Android Studio安装

Android Studio编译C++项目_第1张图片

安装完成后,可在sdk目录看到该工具, 然后将该路径配到环境变量中:

Android Studio编译C++项目_第2张图片

5.2 配置CMake工程

以下流程创建一个hello world项目

  • (1) 新建一个工程文件夹,如CppTest
  • (2) 在CppTest新建一个cpp文件,该文件打印hello world.
#include "iostream"
using namespace std;
int main() {
    cout << "hello, world. cpp" << endl;
    return 0;
}
  • (3) 在 cpp 文件的同一目录下创建 CMakeLists.txt 文件,内容如下:
PROJECT(CppTest)
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
#使用AUX_SOURCE_DIRECTORY命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})
  • (4) 在 cpp 文件的同一目录下创建一个build目录,将工作目录切到build, 然后执行命令: cmake .. 。执行完该命令后,将在build目录下面生成一堆编译后文件,包括Makefile
  • (5) 在build目录下,执行指令: make -f Makefile。执行指令后,将生成可执行文件:main
  • (6) 在build目录下,执行 ./main命令即可

6. AS JNI项目

目前Android Studio已经默认使用CMake方式编译so库,项目配置如下

Android Studio编译C++项目_第3张图片

7. 相关学习资源

  • C++编译链接过程
  • 常用的C/C++编译器及其区别
  • Android NDK开发扫盲及最新CMake的编译使用
  • Android官网 Configure CMake
  • Android NDK 开发之 CMake 必知必会

你可能感兴趣的:(Android)