文章目录
- CMake构建工具
- 1.概念
- 2.mk文件
- 3.CmakeList
- 4.预编译
CMake构建工具
1.概念
Android构建原始库的工具,对mk构建工具封装,还是makefile。
加载lib库
2.mk文件
//call调用test-dir这个方法,返回mk文件的路径,LOCAL_PATH这是个变量
//LOCAL_PATH是Android.mk文件的目录路径
LOCAL_PATH:= $(call test-dir)
2.相当于清理内存
include $(CLEAR_VARS)
编译过的ndk so库
LOCAL_MODULE:= getndk
//指定我们的静态库或者动态库
LOCAL_SRC_FILES:= test.so
LOCAL_SRC_FILES:= test.a
//构建静态库,makefile脚本文件
include $(PREBUILT_STATIC_LIBRARY)
include $(PREBUILT_SHAREN_LIBRARY)
//清理工作
include $(CLEAR_VARS)
//指定库的名称,要构建的模块的名字,
LOCAL_MUDULE:=Test
//把c代码源文件也包含进去
LOCAL_SRC_FILES:=test.cpp \
test.c
//静态库链接
LOCAL_STATIC_LIBRARY:=test
//动态库
LOCAL_SHAREN_LIBRARY:=test
3.CmakeList
CMakeLists.txt
//cmake的最低支持版本
cmake_minimum_required(VERSION 3.10.2)
//当前的工程名称
project("ApplicationB")
//导入c文件
file(GLOB SOURCE *.cpp * .c)
//C代码源文件编译成so库文件
add_library(test-lib
SHARED
${SOURCE}
)
//查找库,ndk的动态库liblog.so
find_library(log-lib,log
)
//这是个变量,test-lib链接总库 ${log-lib}具体的库放入总库中,这样我们ndk的cpp代码才能使用日志log库
target_link_libraries(test-lib, ${log-lib})
//日志
message(STATUS, "-------------------------TEST")
//CMake变量
//变量名 变量值
set(var 666)
//输出,在CMake中的变量都是string类型
message("var = ${var}")
//移除变量
unset(var)
4.预编译
build.gradle中配置
externalNativeBuild {
cmake {
path file("app/src/main/cpp/CMakeLists.txt")
version '3.10.2'
}
}
编译期,就会把静态库的代码提前拿到,运行期不需要静态库,
target_link_libraries(test-lib, ${log-lib})
so库在运行期执行,动态库。,