CMakeList.txt详解

2023-05-16

CMakeListsts.txt详解

    当你使用add_library,添加一个源文件或者库时,为了确保 CMake 可以在编译时定位到你的头文件,最好添加include_directories 命令到 CMake 构建脚本中并指定头文件的路径:


add_library(...)

# Specifies a path to native header files.
include_directories(src/main/cpp/include/)
  

    如果您在构建脚本中指定“native-lib”作为共享库的名称,CMake 将创建一个名称为 libnative-lib.so 的文件。不过在 Java 代码中加载此库时,请使用您在 CMake 构建脚本中指定的名称:


static {
    System.loadLibrary(“native-lib”);
}  

  • 添加NDK API

    由于 NDK 库已经是 CMake 搜索路径的一部分,您不需要在CMakeLists.txt指定库的位置 - 只需要向CMake 提供您希望使用的库的名称,并将其关联到您自己的原生库中。 find_library命令,从NDK API查找指定名称的库,并为该库赋予一个名称,该名称可以在构建脚本中的其他地方引用,以下是引用log库的示例


find_library( # Defines the name of the path variable that stores the
              # location of the NDK library.
              log-lib

              # Specifies the name of the NDK library that
              # CMake needs to locate.
              log )
  

    为了确保原生库中可以调用 log 库中的函数,需要使用 CMake 构建脚本中的target_link_libraries命令关联该库:


find_library(...)

# Links your native library against one or more other native libraries.
target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the log library to the target library.
                       ${log-lib} )
  

    NDK中还包含源代码形式的库,在构建和关联原生库时,如果需要使用这些代码。您可以使用 CMake 构建脚本中的add_library 命令,将源代码编译到原生库中。但是需要要提供该库的路径,您可以使用 ANDROID_NDK 路径变量,Android Studio 会自动为您定义此变量。示例


add_library( app-glue
             STATIC
             ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c )

# You need to link static libraries against your shared native library.
target_link_libraries( native-lib app-glue ${log-lib} )
  

  • 添加预构建库(prebuild)

    添加预构建库与添加原生库类似。不过由于库已经预先构建,您需要使用imported告知CMake 您只希望将库导入到项目中:


add_library( imported-lib
             SHARED
             IMPORTED )
  

    然后,您需要使用set_target_properties命令指定库的路径,如下所示。如果该库有多个ABI版本,你可以使用ANDROID_ABI路径变量


add_library(...)
set_target_properties( # Specifies the target library.
                       imported-lib

                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION

                       # Provides the path to the library you want to import.
                       imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
  

    为了确保 CMake 可以在编译时定位到头文件,您需要使用include_directories命令,包含头文件的路径:


include_directories( imported-lib/include/ )  

    要将预构建库关联到您自己的原生库中,请将其添加到 CMake构建脚本的target_link_libraries命令中:


target_link_libraries( native-lib imported-lib app-glue ${log-lib} )
  

    在您构建应用时,Gradle 会自动将导入的库打包到 APK 中。您可以使用APK Analyzer验证Gradle中将哪些库打包到您的APK中。


常用命令

  • add_library
  • find_library
  • target_link_libraries

  • include_directories  #设置头文件搜索路径
  • aux_source_directory #将当前目录下所有源文件存储在指定列表中

  • link_directories #库路径
  • cmake_minimum_required #指定最小版本

    #DEFAULT的编译选项是 CMAKE_C_FLAGS

    # 指定编译参数

    #SET(CMAKE_CXX_FLAGS "-Wno-error=format-security -Wno-error=pointer-sign")

    #设置生成的SO动态库最后输出的路径

     set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/jniLibs/${ANDROID_ABI})

    更多命令:https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMakeList.txt详解 的相关文章

  • CMakeList.txt

    一个视频讲解 http v youku com v show id XMjc1MjE0MjEwNA 61 61 html cmake 语法设置路径 xff0c 配置库 xff0c 编译器标记 xff1a https www cnblogs
  • ROS的CMakeList编写

    参考这位博主 我的cmakelist包 在 home xxx catkin Drone src Flight Control ROS CMakeLists txt cmake minimum required span class toke
  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • ros2 CMakeLists.txt与packages.xml写法

    注 xff1a 尽量使用ament cmake auto来编写cmakelists txt文件 xff0c 依赖的程序包在packages xml文件中用 lt depend gt nav msgs lt depend gt 的形式声明 x
  • CMakeList静态库多层嵌套问题 undefined reference to

    前言 被一个问题缠绕了很长时间 xff0c 这两天花精力好好研究了一下 xff0c 总算解决了 xff0c 翻过来看 xff0c 就是自己不注意造的很多小问题 我的想法是把一些代码封装起来 xff0c 但是有些部分要求能让现场工作同事有一定
  • [ROS](03)CMakeLists.txt详解

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 目录 1 概述2 CMakeLists txt文件2 1 遵循的格式和顺序2 2 文件解析2 3 find package 2 4 catkin package 1 概述 C
  • CmakeList语法介绍引入Vcpkg与使用Vcpkg导入Opencv

    简单CmakeList txt内容 欢迎使用Markdown编辑器 cmake minimum required VERSION 3 11 引入vcpkg set CMAKE TOOLCHAIN FILE 34 CMAKE SOURCE D
  • CMake、CMakeLists.txt

    2022 06 02 xff0c 今天开始研究cmake 不间断更新 一 说明 0 官方文档网址 xff1a www cmake org 1 cmake的定义 xff1a 高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目 xff
  • CMake&CMakeList.txt

    1 各种关系 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt Makefile 文件 xff0c 在项目的编译时候需要用到的命令有 cmake make 我们本次想搞清楚他们之
  • cmake, make, CMakeLists.txt, Makefile简介

    文章目录 cmake make CMakeList txt Makefile之间的关系参考文章链接 xff1a 转自个人博客 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt M
  • Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    简述 xff1a CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automak
  • ROS CMakeLists.txt中catkin_package和INCLUDE_DIRS的区别

    CMakeLists txt中 catkin package INCLUDE DIRS include 这里代表的是catkin的构建选项 xff0c INCLUDE DIRS表示将使用INCLUDE DIRS后面的内部目录include
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • signature=8544f8b053d71af57dc8d660a85d9730,VIPqiangjian.txt

    E03E57EB8BBCA651CA328471425F6AD0E00BA528AC66F8D93F965C7D2D23A3B430533B0D8637A1FC156333BAEC82986AEFA71FF8B13664AD40742674
  • cmake & CMakeLists.txt

    文章目录 前言先从体验开始1 一个最简单的例子 xff1a 2 例子升级 xff0c 将hello c生成为一个库 xff1a 3 例子升级 xff0c 将源代码和库分开放 xff1a 4 让可执行文件在 bin 目录 xff0c 库文件在
  • CMakeList

    目录 1 简介 2 常用命令 2 1 指定 cmake 的最小版本 2 2 设置项目名称 2 3 设置编译类型 2 4 指定编译包含的源文件 2 4 1 明确指定包含哪些源文件 2 4 2 搜索所有的 cpp 文件 2 4 3自定义搜索规则
  • Matlab:excel文件 转 txt文件 (只需2行代码)

    亲测有用 xff0c 只需两行代码 xff0c 将EXCEL文件 xff0c 转换成txt文件 xff1a Data 61 readtable 39 TEST xls 39 writetable Data 39 test txt 39 ex
  • 学习cmake的使用和CMakeLists.txt

    1 学习cmake的使用和CMakeLists txt 文章目录 1 学习cmake的使用和CMakeLists txt1 1 cmake外部构建基础1 2 让每个源文件目录都包含一个CMakeLists txt1 3 安装 1 4 构建静
  • python 读取txt出现\xef\xbb\xbf…的问题

    用python读取txt文件 xff0c 文件的内容是一列数如下 xff1a 1883 1886 1900 1900 1897 1897 1897 1897 1906 1917 1910 1910 但是读取的时候第一个元素为 xef xbb
  • Cmakelists.txt添加.h和.cpp文件

    文件目录结构是这样 代码都是最基本的代码 仅仅是个小的demo cmakelists txt里面的内容 span class token comment cmake的版本要求 span cmake minimum required span

随机推荐

  • CentOS8.3.2011无法联网解决方案

    1 切换到ifcfg ensXX目录下 cd etc sysconfig network scripts 2 编辑ifcfg ensXX文件 vim ifcfg ens33 3 修改 BOOTPROTO 61 dhcp 并且修改 ONBOO
  • Run Windows in Ubuntu with VMware Player 使用 VMware Player 在 Ubuntu 下运行 Win

    Are you an enthusiast who loves their Ubuntu Linux experience but still needs to use Windows programs Here s how you can
  • Ardupilot固定翼无人机L1制导律原理及代码解读

    L1制导律是固定翼无人机飞行路径跟踪的重要算法之一 xff0c 这个算法由MIT的研究人员提出 在这之前 xff0c 无人机进行路径跟踪一般采用基于侧偏距的PD控制器方法 至于为什么使用PD而不使用PID xff0c 那是因为位置环响应慢
  • sumo交通流仿真软件的使用说明

    1 安装流程 xff1a 1 xff09 mis文件安装 xff1a 官网下载下来一键安装 xff1b 2 xff09 tar利用压缩安装 xff1a 官网下载安装包 xff0c 解压后 xff0c 在系统变量变量中定义sumo的路径和bi
  • 搭建PX4开发环境

    PX4是著名的开源无人机开发平台 xff0c 它提供了一个虚拟环境 xff0c 可以用来验证无人机的飞控算法 xff0c 也可以连接开源硬件 xff0c 为无人机的开发提供了极大便利 目前PX4支持的操作系统是ubuntu 18 04LTS
  • 进程间通信IPC——命名管道

    命名管道 1 基本概念2 创建1 xff09 命令行2 xff09 函数 3 示例 1 基本概念 命名管道是一种特殊的文件类型 xff0c 其存在于磁盘上 xff0c 但是大小永远是0 不同于匿名管道的是 xff1a 可在同一台计算机的不同
  • docker学习内容(1)-介绍与安装

    docker是什么 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案 Docker 的基础是 Linux 容器 xff08 LXC xff09 等技术 docker干什么 更快速的交付和部署 高效虚拟化 docker的出现 xf
  • 2014百度校园招聘笔试题(长春站)

    一 xff0c 简答题 30分 1 xff0c 当前计算机系统一般会采用层次结构存储数据 xff0c 请介绍下典型计算机存储系统一般分为哪几个层次 xff0c 为什么采用分层存储数据能有效提高程序的执行效率 xff1f 10分 2 xff0
  • 【图像处理】A Skinned Multi-Person Linear Model(SMPL)浅解析

    图像处理 A Skinned Multi Person Linear Model xff08 SMPL xff09 浅解析 SMPL的原理结语 SMPL的原理 首先 xff0c 博主不做3D建模的工作 xff08 尽管这项工作真的很酷 xf
  • 播放音乐There was an error running option A4 audio; amixer... error no such file or directory

    目标 xff1a 树莓派的3 5mm音频输出口连接音箱 xff0c 让音箱播放音乐 踩坑 xff1a 在网上找了各种教程 xff0c 前后折腾了三四天 xff0c 才终于把这个问题解决 xff08 不想看具体的踩坑过程的话 xff0c 可以
  • SLAM 介绍

    http www slamcn org index php E9 A6 96 E9 A1 B5 比较好的开源SLAM Odometry代码 xff1a https github com ethz asl rovio https github
  • 阅读:Learning Deep Features for Discriminative Localization

    作者 xff1a Bolei Zhou Aditya Khosla Agata Lapedriza Aude Oliva Antonio Torralba 来源 xff1a CVPR2015 摘要 本文重新审视了 Network in ne
  • openstack软删除虚拟机,类似于删除到回收站

    vim etc nova nova conf DEFAULT my ip 61 192 168 176 57 其他控制节点修改 use neutron 61 true firewall driver 61 nova virt firewal
  • C++:多态 详解

    目录 一 多态的概念 二 多态的定义及实现 1 重写 覆盖 的要求 2 多态两个要求 xff1a 3 多态的切片示意图 4 多态演示 xff1a 买票场景下的多态 完整代码 5 虚函数重写的例外 xff1a 协变 父类与子类虚函数返回值类型
  • 参考任哲的《嵌入式实时操作系统μC_OS-II原理及应用》,对UCOS的任务调度做了下整理。

    参考任哲的 嵌入式 实时操作系统 C OS II原理及应用 xff0c 对 UCOS 的任务调度做了下整理 UCOS有两种调度器 xff0c 一种是任务级的调度器 xff0c 一种是中断级的调度器 任务级的调度器由OSSHED 来实现 而中
  • 树莓派3 声音传感器(win10)

    这段时间太忙了 xff0c 项目收尾一直没有时间继续捣鼓树莓派 xff0c 正好趁这个双休抽点时间来和我的小伙伴玩耍一把 上篇文章提到我想用 Win10 Iot Core 和买来的一堆传感器摩擦出一些火花 xff0c 虽然 xff0c 已经
  • 离线安装centos7 图形界面

    离线安装centos7图形界面 一 配置yum源 1 备份系统 repo源 cd etc yum repos d mkdir back mv repo back 2 创建yum配置文件并编辑 cd etc yum repos d touch
  • eclipse部署tomcat修改项目访问路径(虚拟路径)

    原文参考 xff1a http www educity cn wenda 147993 html http blog 163 com java zf blog static 19926038420129240314546 tomcat部署w
  • kernle下制作动态logo

    在uboot中实现logo的好处是反映速度快 在kernel中实现logo的好处是 xff0c 不管是android还是什么其他平台 xff0c logo显示无需考虑上层平台 参照三星平台的写法 xff0c logo的显示一方面是开机时产品
  • CMakeList.txt详解

    CMakeListsts txt详解 当你使用add library 添加一个源文件或者库时 为了确保 CMake 可以在编译时定位到你的头文件 xff0c 最好添加include directories 命令到 CMake 构建脚本中并指