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