CMake使用 - Android NDK开发

1. 前言

当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMakeLists.txt 的配置脚本,很容易就会踩坑,遇到编译失败,一个很小的配置问题都会浪费很多时间。所谓工欲善其事必先利其器,学习 NDK 开发还是要大致了解 CMake 的基本语法和配置的。下面文章是根据CMake 实践手册做的一些简短笔记,具体说得不够详细的地方,可以查看手册。

2. CMake 是什么?

CMake 是一个开源的跨平台自动化构建系统。官网地址:CMake

2.1CMake 的特点
  • 1)开放源代码,使用类 BSD 许可发布。
  • 2)跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在Mac 平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
  • 3)能够管理大型项目;
  • 4)简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
  • 5)高效率;
  • 6)可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。
2.2 使用建议

1)如果你没有实际的项目需求,那么看到这里就可以停下来了,因为 CMake 的学习过程就是实践过程,没有实践,读的再多几天后也会忘记;
2)如果你的工程只有几个文件,直接编写 Makefile 是最好的选择;(那得学习 make 命令和熟悉 Makefile 的构建规则,这是另外一回事了)
3)如果使用的是 C/C++/Java 之外的语言,请不要使用 CMake;
4)如果你使用的语言有非常完备的构建体系,比如 java 的 ant,也不需要学习 cmake;
5)如果项目已经采用了非常完备的工程管理工具,并且不存在维护问题,没有必要迁移到CMake

CMakeLists.txt 文件是 CMake 的构建定义文件。如果工程存在多个目录,需要在每个要管理的目录都添加一个 CMakeLists.txt 文件。

3. CMake 命令

CMake 命令行格式有很多种,这里只介绍一种比较常用的

cmake [<options>] (<path-to-source> | <path-to-existing-build>)   

options 为可选项,为空时,构建的路径为当前路径。
options 的值,可以通过输入cmake --help 或到官方文档CMake-cmake查看,比如:
-G <generator-name> 是指定构建系统的生成器,当前平台所支持的 generator-name 也可以通过cmake --help查看。(options 一般默认为空就好,这里不做过多介绍)

path-to-sourcepath-to-existing-build二选一,分别表示 CMakeLists.txt 所在的路径和一个已存在的构建工程的目录

  • cmake .表示构建当前目录下 CMakeLists.txt 的配置,并在当前目录下生成 Makefile 等文件;【属于内部构建】
  • cmake ..表示构建上一级目录下 CMakeLists.txt 的配置,并在当前目录下生成 Makefile 等文件;
  • cmake [参数] [指定进行编译的目录或存放Makefile文件的目录] [指定CMakeLists.txt文件所在的目录] 【属于外部构建】

附:内部构建(in-source build)与外部构建(out-of-source build)
内部构建生成的临时文件可能比源代码还要多,非常影响工程的目录结构和可读性。而CMake 官方建议使用外部构建,外部构建可以达到将生成中间产物与源代码分离。

4. Hello World CMake

注:以下 Mac 平台

安装 CMake (Windows 可以到官网下载安装包安装 Download | CMake

brew install cmake
brew link cmake
cmake -version #检验是否安装成功,显示对应 CMake 版本号即表示安装成功

创建一个 CMake/t1 目录,并分别编写 main.c 和 CMakeLists.txt (CMakeLists.txt 是 CMake 的构建定义文件)

#include <stdio.h>
int 
Android NDK环境中使用CMake进行项目配置通常涉及到以下几个步骤: 1. **安装CMake**: 先确保在你的开发机器上已经安装了CMake。如果没有,可以从官方网站下载并安装。 2. **创建CMakeLists.txt**: 在你的项目根目录下创建一个名为`CMakeLists.txt`的文件,这是CMake用于管理构建的主配置文件。 3. **添加Android支持**: 在`CMakeLists.txt`顶部,添加以下行来告诉CMake这是一个Android项目,并指定NDK的路径: ```cmake cmake_minimum_required(VERSION 3.4) project(MyProject) set(CMAKE_SYSTEM_NAME Linux) # 或者其他Android对应的系统名称 set(CMAKE_SYSTEM_PROCESSOR arm64-v8a) # 根据你的设备选择合适的处理器架构 set(ANDROID_NDK_PATH /path/to/your/android-ndk) # 替换为你的NDK实际路径 ``` 4. **指定目标平台**: ```cmake find_package(Threads REQUIRED) include_directories(${CMAKE_SOURCE_DIR}/src) # 添加源代码目录 add_library(mylib SHARED src/main.cpp) # 添加你的源文件 target_link_libraries(mylib ${CMAKE_THREAD_LIBS_INIT}) # 确保链接线程库 ``` 如果你的项目包含JNI代码,记得添加`set(CMAKE_ANDROID_STL_TYPE gnustl)`。 5. **生成makefile**: ```shell cd /path/to/your/project cmake .. ninja # 或者 make,取决于你配置的构建工具 ``` 运行上述命令将在你的项目目录下生成一个`build`目录,里面包含用于构建的中间文件。 6. **构建和部署到设备**: 使用`adb`工具将编译后的APK推送到设备上: ```shell adb install build/app/outputs/apk/debug/app-debug.apk ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值