文章目录
- 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库在运行期执行,动态库。,








![[二分查找]LeetCode2009 :使数组连续的最少操作数](https://img-blog.csdnimg.cn/f95ddae62a4e43a68295601c723f92fb.gif#pic_center)










