一、CMake常用变量
一般来说,我们可以用set指令显示定义一个变量,但CMake系统已经帮我们隐式预定义了一些变量,可以采用${VAR}方式来 调用这些变量,以下记录一些Android CMakeLists.txt文件中常用的变量。
PROJECT_SOURCE_DIR
当前工程的源码路径。
PROJECT_BINARY_DIR
指向工程构建目录的全路径。
CMAKE_VERSION
CMake的完整版本号;格式为major.minor.patch[.tweak[-id]]
CMAKE_CURRENT_SOURCE_DIR
调用这个变量的CMakeLists.txt所在路径
CMAKE_CURRENT_LIST_FILE
调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE
这个变量所在的行数
PROJECT_NAME
返回通过project指令定义的项目名称
二、调用第三方so库的CMakeLists.txt配置
下面是调用了三个so库的配置。
cmake_minimum_required(VERSION 3.4.1)
#依赖的头文件添目录,这个要写在前面
#include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp)
add_library( #库名称
LiveDetect
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
src/main/cpp/liveDetect.cpp)
add_library( #库名称
CwAttLivDet
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
IMPORTED )
set_target_properties(
CwAttLivDet
PROPERTIES IMPORTED_LOCATION
#${Project}/app/libs/${ANDROID_ABI}/libtest-lib.so//需设置Project
${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libCwAttLivDet.so
#${CMAKE_SOURCE_DIR}/src/main/cpp/libCwAttLivDet.so
#../../../../libs/${ANDROID_ABI}/libtest-lib.so
)
add_library( #库名称
deepnet
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
IMPORTED )
set_target_properties(
deepnet
PROPERTIES IMPORTED_LOCATION
#${Project}/app/libs/${ANDROID_ABI}/libtest-lib.so//需设置Project
${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libdeepnet.so
#${CMAKE_SOURCE_DIR}/src/main/cpp/libdeepnet.so
#../../../../libs/${ANDROID_ABI}/libtest-lib.so
)
add_library( #库名称
cwauthorize_android
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
IMPORTED )
set_target_properties(
cwauthorize_android
PROPERTIES IMPORTED_LOCATION
#${Project}/app/libs/${ANDROID_ABI}/libtest-lib.so//需设置Project
${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcwauthorize_android.so
#${CMAKE_SOURCE_DIR}/src/main/cpp/libcwauthorize_android.so
#../../../../libs/${ANDROID_ABI}/libtest-lib.so
)
#指定要引用的xxxx.so的头文件目录
#set(LIBJPEG_INCLUDE_DIR src/main/cpp)
#include_directories(${LIBJPEG_INCLUDE_DIR})
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( #库名 与前面的对应
LiveDetect
CwAttLivDet
cwauthorize_android
deepnet
#文件目录
${log-lib} )
三、实例
导入第三方so库操作
把第三方的库文件放到libs目录下面,包含上面生成的7中CPU文件
然后配置 CMakeLists.txt ,一共4步,如下:
cmake_minimum_required(VERSION 3.4.1)
#1.配置第三方so库.h头文件路径
include_directories(src/main/cpp/header)
#指定so库输出路径
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI})
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
#2.添加第三方库
add_library(test-lib SHARED IMPORTED)
#3.添加库的路径
set_target_properties(test-lib
PROPERTIES IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI}/libtest-lib.so)
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 )
#4.添加链接
target_link_libraries( # Specifies the target library.
native-lib
test-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )