1、在安卓的JNI开发中,CMake是一个很重要的辅助工具,CMake是一个比make更高级的编译工具,在AS2.2版本及以上,CMake取代了make工具成为了默认的native库构建工具

2、CMakeLists.txt文件的一些常见命令配置

#指定cmake的最低版本号
cmake_minimum_required(VERSION 3.4.1)

#添加一个名称为native-lib的库文件
add_library( # Sets the name of the library.
             #设置要添加的库文件的名称
             native-lib

             # Sets the library as a shared library.
             #指定添加的库文件是动态库还是静态库
             #STATIC:静态库   SHARED:动态库
             SHARED

             # Provides a relative path to your source file(s).
             #指定要添加的库的源文件路径
             native-lib.cpp )

#查找系统库,这里是将查找的系统库log赋值给变量log-lib
find_library( # Sets the name of the path variable
              #变量
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              #系统库
              log )

#将一些库链接到目标库
target_link_libraries( # Specifies the target library.
                       #目标库 
                       native-lib

                       #将lib1 lib2 lib3链接到目标库native-lib上
                       #如果lib1依赖lib2  lib2又依赖于lib3,那么这三者的顺序只能是lib1  lib2  lib3而不能修改
                       lib1  lib2  lib3 )

#设置变量,dir_var:变量名称   src/main/cpp:变量的值
set(dir_var  src/main/cpp)

#查找当前目录所有源文件,并将查找到的源文件名称列表保存到变量DIR_SRCS中
aux_source_directory(. DIR_SRCS)

#设置头文件目录路径(可以是相对路径也可以是绝对路径)
#例如src/main/cpp/include目录下是一些.h的头文件
include_directories(src/main/cpp/include)

#添加可执行文件
add_executable(<name> ${SRC_LIST})

#Android6.0版本以后添加预编译库
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -L[so所在目录]") #c库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L[so所在目录]") #cpp库

3、cmake在app的build.gradle中的配置

android {
    ...

    defaultConfig {
        ...

        externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters 'armeabi-v7a' //指定cpu的架构
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"  //指定CMakeLists.txt的路径,这里表示是在app目录下
        }
    }

    ...
}

原文地址: https://blog.csdn.net/huideveloper/article/details/108529421

发表评论

邮箱地址不会被公开。 必填项已用*标注