一、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
#{ANDROID_ABI}/libtest-lib.so//需设置Project
{ANDROID_ABI}/libCwAttLivDet.so
#{ANDROID_ABI}/libtest-lib.so
)
add_library( #库名称
deepnet
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
IMPORTED )
set_target_properties(
deepnet
PROPERTIES IMPORTED_LOCATION
#{ANDROID_ABI}/libtest-lib.so//需设置Project
{ANDROID_ABI}/libdeepnet.so
#{ANDROID_ABI}/libtest-lib.so
)
add_library( #库名称
cwauthorize_android
#类型 STATIC或者SHARE
SHARED
#文件 静态库 查看 set_target_properties
IMPORTED )
set_target_properties(
cwauthorize_android
PROPERTIES IMPORTED_LOCATION
#{ANDROID_ABI}/libtest-lib.so//需设置Project
{ANDROID_ABI}/libcwauthorize_android.so
#{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} )