CMakeLists 是一個高級別的用于構(gòu)建的配置腳本泉哈,腳本最終解釋為ninja帚桩。
ninja是跨端的統(tǒng)一構(gòu)建工具瑟匆,由rules.ninja 來抹平各平臺構(gòu)建工具和命令的差異处渣,能力很底層很原子,所以呢開發(fā)效率低诱贿。需要一套更高級語言娃肿,生成ninja咕缎。
這套高級語言除了CMakeLists ,還有g(shù)oogle的 gn(https://gn.googlesource.com/gn/) 料扰。
下面解釋下 靜態(tài)so和動態(tài)so凭豪。
- 靜態(tài)A文件 add_library(HBD STATIC 用于指示生成A文件。
1.1 cpp文件編譯為.o文件晒杈,編譯過程涉及需要include文件路徑嫂伞。系統(tǒng)的include是在哪里指定的呢?是在rules.ninja command指令中 指定的拯钻。sysroot=~/Library/Android/sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
1.2 使用ar 把.o文件打包為 .a文件帖努。
- 動態(tài)so add_library(gl2jni SHARED
動態(tài)so還需要鏈接(預(yù)編譯、編譯粪般、鏈接)然磷,這個SHARED用于指示生成so文件。
-DANDROID_STL=c++_shared 用于指明 stl使用動態(tài)鏈接刊驴。
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)