这篇记录CMakeLists.txt中的一些常规CMake使用
预知识:
# CMAKE_SOURCE_DIR: 当前cmakelists.txt的路径
# ANDROID_ABI : 获取build.gradle中设置的cpu架构名称
# Android支持的cpu架构armeabi、armeabi-v7a(目前大部分机器)、arm64-v8a (高端机型)、x86、x86_64、mips、mips64
在build.gradle中的配置
也会创建相应的文件夹
1. 指定cmake最小支持版本的方法(#-----为cmake的注释符)
# 指定cmake最小支持版本的方法
cmake_minimum_required(VERSION 3.6)
2. 打印方法
message("你好,我是打印方法")
message("ANDROID_ABI 值是:${ANDROID_ABI}")
如何查看答应结果???
build--->make Project
3. 寻找头文件
# 寻找src/main/cmake/include文件路径的头文件(即 .h文件)
include_directories(src/main/cmake/include)
4. find_library
find_library(log-lib log)
message("log-lib的目录:${log-lib}")
find_library会在/sdk/。。。/arm-linux-androideabi/21/下找相关的so文件 。其中21是由build.gradle中的minSdkVersion决定
5. include_directories
#引入其他的 XX 目录的cmakelist
#add_subdirectory(XX)
6. file----引入动态库(.so)
#在cmake中空格为结束符
#将.c、.cpp文件的路径赋值给source
file(GLOB source src/main/cmake/*.c src/main/cmake/*.cpp src/main/cmake/a/*.cpp )
# hello-jni: 变量名 最终会生成的so名字
# SHARED: 动态库
add_library(hello-jni SHARED ${source})
set
#第二种导入动态库的方法:
# c++: set命令设置CMAKE_C_FLAGS或CMAKE_CXX_FLAGS变量则是分别只针对c和c++编译器的。即c文件用CMAKE_C_FLAGS,c++文件用CMAKE_CXX_FLAGS。
# set 方法
#CMAKE_CXX_FLAGS = "${CMAKE_CXX_FLAGS} XXXX" 这个很有意思,相当于i=i+XXXX
# -L: 库的查找路径 libTest.so
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI} ")
#相当于CMAKE_CXX_FLAGS = CMAKE_CXX_FLAGS + {CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}
7. 引入静态库(.a文件)
# STATIC:静态库
# IMPORTED: 表示我们这一个静态库是以导入的形式添加进来(预编译静态库)
add_library(Test2 STATIC IMPORTED)
set_target_properties(Test2 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cmake/${ANDROID_ABI}/libTest.a)