美文网首页
Android Cmake教程 未完待续......

Android Cmake教程 未完待续......

作者: aimaile | 来源:发表于2019-01-26 21:22 被阅读0次

    一、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} )
    

    三、实例

    ndk.png

    导入第三方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} )
    

    四、参考链接
    https://blog.csdn.net/dengweijunkedafu/article/details/89218863?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

    相关文章

      网友评论

          本文标题:Android Cmake教程 未完待续......

          本文链接:https://www.haomeiwen.com/subject/mgryeftx.html