美文网首页Android开发Android技术知识Android开发
Part01_CMakeLists构建管理多个模块的C代码

Part01_CMakeLists构建管理多个模块的C代码

作者: IT魔幻师 | 来源:发表于2018-03-08 14:17 被阅读555次

一、目录结构

根据我的个人管理习惯我喜欢在app目录下的CMakeLists引入到CPP目录下如果有多个项目每个项目构建一个CMakeLists分开管理。

二、app目录下的CMakeLists语法

    cmake_minimum_required(VERSION 3.4.1)

    #设置编译完成后so库生成的路径为 app/libs(可根据自己的习惯设置)
    #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI})

    #引入src/main/cpp/testjni目录下的CMakeLists
    ADD_SUBDIRECTORY(src/main/cpp/testjni)

    #引入src/main/cpp/testjni2目录下的CMakeLists
    ADD_SUBDIRECTORY(src/main/cpp/testjni2)

三、项目下的CMakeLists语法,以tesijni为例

    #引入头文件目录
    include_directories(include)
    
    # 获取当前目录下的所有的文件(目录)的路径并保存到 all_source 变量中
    file(GLOB all_source  *.cpp *.c )
    #引入all_source变量中的源文件编译为native-lib的库
    add_library( native-lib
                 SHARED
                 ${all_source} )
    
    #引入libs目录中第三方的libopencv_java.so库
    add_library(lib_opencv
                SHARED
                IMPORTED)
    set_target_properties(lib_opencv
                          PROPERTIES IMPORTED_LOCATION
                          ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libopencv_java.so)
    
    find_library( log-lib
                  log )
    
    target_link_libraries( native-lib
                           ${log-lib}
                            lib_opencv)

四、build.gradle配置

    defaultConfig {
        applicationId "com.taiyao.tongzi"
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 3
        versionName "2.0.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions -ffast-math -O3"
                arguments '-DANDROID_STL=gnustl_static'   //支持C++异常处理标准模板快
                arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
            }
        }
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }


    sourceSets{
        main{
            jniLibs.srcDirs=['libs']
        }
    }

    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }

相关文章

  • Part01_CMakeLists构建管理多个模块的C代码

    一、目录结构 根据我的个人管理习惯我喜欢在app目录下的CMakeLists引入到CPP目录下如果有多个项目每个项...

  • 2018-01-18使用maven搭建多模块的springmvc

    1、maven自动管理java包 2、maven构建多个模块,结构清晰,管理方便。 3、使用mybatis持久化框...

  • 大型前端项目管理 - Monorepo

    Monorepo Monorepo 是管理项目代码的一个方式,指在一个项目仓库 (repo) 中管理多个模块/包 ...

  • 2021-06-26 lerna管理项目

    monorepo 管理代码的一个方式, 指的是在一个仓库里管理多个模块/包 package monorepo最主要...

  • Spring Boot 为什么用模块?

    Spring Boot 1.为什么用模块? 构建模块化系统可以缩短开发时间,改进代码管理,延长系统寿命,并提供更高...

  • AMD_CMD_RequireJS

    1、为什么要使用模块化? a)解决命名冲突b)增强代码的阅读以及维护性c)便于依赖管理d)提高代码的复用率 2、C...

  • Python爬虫之BeautifulSoup模块

    模块安装 模块导入 示例html内容 获取html内容代码 获取的html内容 构建BeautifulSoup对象...

  • angular.module 详解

    AngularJS 模块模块包含了主要的应用代码。一个应用可以包含多个模块,每一个模块都包含了定义具体功能的代码。...

  • 2018-11-13day13-linux安装软件

    一、Linux系统安装软件 方式一:使用包管理工具 - yum和rpm 方式二:源代码构建安装 - 下载源代码用C...

  • js模块

    所谓模块化主要是解决代码分割、作用域隔离、模块之间的依赖管理以及发布到生产环境时的自动化打包与处理等多个方面 优点...

网友评论

    本文标题:Part01_CMakeLists构建管理多个模块的C代码

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