文章目录
一、Android Studio 中使用 CMake 编译单个 C++ 源文件
二、cmake_minimum_required 命令设置最小 CMake 版本
三、project 命令设置工程名称
四、add_library 命令设置生成函数库
五、find_library 命令设置查找函数库
六、target_link_libraries 命令设置链接函数库
七、CMakeLists.txt 详细中文注释
该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ;
一、Android Studio 中使用 CMake 编译单个 C++ 源文件
Android Studio 自动生成的 CMakeLists.txt 构建脚本就是默认编译单个 C++ 源码的构建脚本 ;
cmake_minimum_required(VERSION 3.10.2) project("cmake") add_library( native-lib SHARED native-lib.cpp ) find_library( log-lib log ) target_link_libraries( native-lib ${log-lib} )
下面开始逐个解析上面使用到的命令 ;
CMakeList.txt 中使用到的命令一共只有 93 9393 个, 47 4747 个脚本命令 , 46 4646 个工程命令 , 可以到 CMake 官方查询这些命令的用法 , 在稍后的博客中也会逐一讲解 Android Studio 中的 NDK 常用的 CMake 命令 ;
参考 【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 ) 博客 ;
二、cmake_minimum_required 命令设置最小 CMake 版本
指定 CMake 最低版本 : 使用 cmake_minimum_required 命令 , 指定编译 C/C++ 源码的 CMake 工具的最低版本 , 这里会自动生成 ;
# 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.10.2)
设置格式说明 : VERSION 是固定必须写的 , VERSION 后面就是 CMake 的版本号 ;
这里推荐大家一定要安装最新的 CMake 版本 ;
官方文档地址 : https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html
三、project 命令设置工程名称
project 命令用于声明工程名称 , 同时还可以指定工程支持的语言 , 其中支持的语言可以忽略, 默认支持所有的语言 ;
# 声明项目并为项目命名. project("cmake")
如果支持 C++ 语言的话 , 可以设置 project(“cmake” CXX) ;
官方文档地址 : https://cmake.org/cmake/help/latest/command/project.html
四、add_library 命令设置生成函数库
add_library 命令用于设置生成函数库 , 这个函数库包括 so 动态库 和 a 静态库 ;
add_library 命令作用 : 创建函数库并为函数库命名.
函数库类型 : 设置该函数库的类型 ① 静态库 STATIC ② 动态库 SHARED.
相对路径 : 指定源码路径, 注意是相对路径.
函数库个数据 : 可以定义多个函数库, CMake 会负责构建这些函数库.
动态库打包 : Gradle 会自动将动态库打包到 APK 安装包中.
add_library 命令三个参数说明 :
参数 1 : 设置生成的动态库名称.
参数 2 : 设置生成的函数库类型 : ① 静态库 STATIC ② 动态库 SHARED.
参数 3 : 配置要编译的源文件.
# 创建函数库并为函数库命名. # 函数库类型 : 设置该函数库的类型 ① 静态库 STATIC ② 动态库 SHARED. # 相对路径 : 指定源码路径, 注意是相对路径. # 函数库个数据 : 可以定义多个函数库, CMake 会负责构建这些函数库. # 动态库打包 : Gradle 会自动将动态库打包到 APK 安装包中. add_library( # 参数 1 : 设置生成的动态库名称. native-lib # 参数 2 : 设置生成的函数库类型 : ① 静态库 STATIC ② 动态库 SHARED. SHARED # 参数 3 : 配置要编译的源文件. native-lib.cpp )
官方文档地址 : https://cmake.org/cmake/help/latest/command/add_library.html