1.CMakeLists.txt是什么
CMakeList是一个“构建系统的描述文件(Build Specification)” 它负责定义如何把源码编译为可执行的程序或库 它由CMake执行,执行后产物被对应的编译器再进行执行,生成目标可执行程序或库。
比如在Android的JNI开发中,我们需要使用C++实现一些非原生api实现的渲染效果,我们可以在JNI层下,设计一个OpenglES渲染库;我们在CMkaeList文件定义了这个库构建所需的所有信息(定义项目名称、文件依赖、构建目标),Android Studio 自带的CMake会继续解析,编译平台会基于解析结果生成可执行文件,给上层Java/Kotlin原生层调用
2.CMakeLists.txt在控制什么
CmakeLists.txt并不直接编译代码,它是被CMake生成构建系统,再被编译器执行
3.一些常见的CMakeLists.tst指令含义
3.1 对CMake定义最小的CMake版本
cmake_minimum_required(VERSION 3.20)
3.2 定义项目名称
project(xxProject)
3.3 定义“构建目标”(add_xxx方法)
add_library(xxx SHARED ...)
add_executable(xxxx_xxxx ...)
| 类型 | 结果 |
|---|---|
| add_executable | .exe |
| add_library(SHARED) | .dll |
| add_library(STATIC) | .lib |
3.3 定义库依赖关系
target_link_libraries(a b)
表示 a 依赖 b,CMake会自动编排编译顺序,传递include/lib
3.4 定义头文件路径
target_include_directories(a PUBLIC xxx)
告诉a项目下的文件,#include<xxx> 在哪里获得
3.5 定义“链接库”路径
link_directories(...)
告诉linker,.lib在哪里
3.6 定义输出结构
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ...)
控制输出的文件放在那里
3.7 定义“安装/发布”
install(...)
定义如何生成SDK