关于CMakeLists.txt

0 阅读1分钟

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生成构建系统,再被编译器执行

CMakeLists整体流程.png

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