CMakeLists.txt 构建流程

CMakeLists 是一个高级别的用于构建的配置脚本,脚本最终解释为ninja。
ninja是跨端的统一构建工具,由rules.ninja 来抹平各平台构建工具和命令的差异,能力很底层很原子,所以呢开发效率低。需要一套更高级语言,生成ninja。
这套高级语言除了CMakeLists ,还有google的 gn(https://gn.googlesource.com/gn/) 。

下面解释下 静态so和动态so。

  1. 静态A文件 add_library(HBD STATIC 用于指示生成A文件。
    1.1 cpp文件编译为.o文件,编译过程涉及需要include文件路径。系统的include是在哪里指定的呢?是在rules.ninja command指令中 指定的。sysroot=~/Library/Android/sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/darwin-x86_64/sysroot

1.2 使用ar 把.o文件打包为 .a文件。

  1. 动态so add_library(gl2jni SHARED
    动态so还需要链接(预编译、编译、链接),这个SHARED用于指示生成so文件。
    -DANDROID_STL=c++_shared 用于指明 stl使用动态链接。

externalNativeBuild {
ndk{
abiFilters "arm64-v8a" //"armeabi-v7a",
}
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}


cmake_minimum_required(VERSION 3.4.1)

now build app's shared lib

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
include_directories(./)
add_library(HBD STATIC
AHardwareBufferDemo.cpp)

add_library(gl2jni SHARED
gl_code.cpp)

add lib dependencies

target_link_libraries(gl2jni
HBD
android
log
EGL
GLESv2
sync
GLESv3)


你可能感兴趣的:(CMakeLists.txt 构建流程)