CMakeLists 理解

2023-05-16

CMakeLists 理解

最近发现其实之前对CMakeLists 理解不是很全面, 零零散散在网上看到的一些教程,其实都是为了解决某个命令的问题,要不然就是对一些命令的翻译理解,实际上是很劝退的.

因此写一些自己对CMakeLists的具体理解,若有不当的地方欢迎指正.

1.基础理解

CmakeLists 本质上是一种生成Cmake file 文件的工具, 方便之后GNU编译使用.

那么这里理解成,CMakeLists 里面的最主要指令,可以简单理解为

链接文件 和 生成文件

由此生成一些可执行文件,这些文件是与另外一些文件链接起来的

2.add_executable()

这就是生成文件的入口,理论上,如果我们要生成一个可执行文件来自main.cpp 可以直接写成

add_executable(main.o, main.cpp)

这里默认了一件事情, 即我们main.cpp 可以单独被执行,没有其他的依赖项.若有依赖项文件,可以添加到后面, 例如

add_executable(main.o main.cpp depend.cpp)

这里就出现了一个问题, 我们在main.cpp 中调用的文件一般都是头文件, 例如 #include<depend.h>, 如果该文件与main.cpp 在同一文件夹内还好,否则是找不到该文件的, 那编译时也就找不到调用的目标了.
所以可以用另一个命令包含该文件夹 例如

include
|    depend.h
main.cpp
depend.cpp
CMakeLists.txt

可以使用

 include_directories(include)

这样就能找到我们需要的文件 depend.h了

3. link_target_libraries

一般来说我们程序里还会引入很多外部库, 其中包括很多已经编译好的库文件, 例如常用的Opencv 等等
假设我们想要调用一个Opencv 里很简单的cv imshow 函数用来显示一个图像.

编译时会发生什么呢, 首先还是一样,我们需要引入头文件的位置,这样我们程序里#include 才能找到位置.

include_directories(OpenCV_INCLUDE_DIRS)  #这里OpenCV_INCLUDE_DIRS 就是opencv 头文件所在位置

那么接下来我们是不是也应该找到imshow的实现文件,并且加入add_executable 中去呢, 可以, 但是确实没有必要. 对大部分第三方库,我们安装的时候都会生成一些 .so 文件, 如果我们使用

add_executable(main.o main.cpp depend.cpp)
target_link_libraries(main.o OpenCV_LIBRARIES)

4. find_package()

那么问题又出现了,我们知道对于一个第三方库来说,常常会有很多文件,也会有很多个lib 文件. 我们手动添加显然是不合适的, 而且是一个很大的工作量, 那么就可以使用

find_package(opencv) 

来寻找系统中已经安装好的,opencv, 一旦找到, OpenCV_INCLUDE_DIRS 和 OpenCV_LIBRARIES 就会被赋值为这写路径, 之后我们就可以直接使用了

总体来看 即为

cmake_minimum_required(VERSION 3.5) #通用 部分 设置Cmake 的最低版本

PROJECT(main)  # 设置项目名称

find_package(opencv) 

include_directories(include)

include_directories(OpenCV_INCLUDE_DIRS)  #这里OpenCV_INCLUDE_DIRS 就是opencv 头文件所在位置

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

CMakeLists 理解 的相关文章

  • CMakeLists.txt 语法介绍与实例演练

    一 Cmake 简介 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 二 常用命令 1 指定 cmake 的最小版本 span class t
  • CMake项目中神器:CMakeLists.txt

    首次接触 CMake xff0c 见识了 CMakeLists txt 的强大后 xff0c 赶紧整理出来分享一下 参考资料 xff1a Cmake 3 6 W3Cschool参考手册 本文讲述了一个 CMake 项目 xff0c 在从单文
  • cmake CMakeLists.txt 命令 add_compile_options、add_definitions、target_compile_definitions、build_command

    add compile options 增加源文件的编译选项 add compile options lt option gt 为当前路径和下层路径的目标增加编译器命令行选项 xff0c 选项在此命令被调用后添加 查看文档中关于路径和目标的
  • CmakeLists所遇命令用法总结

    1 option命令 xff1a 形式 xff1a option lt variable gt 34 lt help text gt 34 value 简介 xff1a cmake中option起到编译开关的作用 xff0c CMakeLi
  • Record: My CMakeLists

    1 设置需要的最小版本的cmake cmake minimum required VERSION 3 10 2 定义生成的项目名 project perceive tracking 3 1 设置cmake参数 set CMAKE CXX F
  • CMakeLists.txt详解

    一 xff1a CMakeLists txt文件是cmake用来生成Makefile文件需要的一个描述编译链接的规则文件 学习cmake需要提前了解gcc等编译命令 xff0c 先来解释一条最简单的命令 gcc source c o bin
  • CMakeLists笔记

    CMakeLists笔记 一 路径名二 函数三 常用 一 路径名 PROJECT SOURCE DIR xff1a 一般为catkin ws src xff0c 是cmakelists的绝对路径PROJECT BINARY DIR xff1
  • CMakeLists.txt书写规则记录

    编写自己的CMakeLists txt 1 一个CMakeLists txt的基本内容2 项目包含多个文件或文件夹时添加方式3 添加链接库 1 一个CMakeLists txt的基本内容 span class token comment 编
  • 探讨ros下的cmakelists文件的编写

    文章目录 cmakelists文件整体架构分块讲解1 CMake版本2 软件包名称3 查找相关的CMake包4 消息 服务 动作生成器 cmakelists文件整体架构 所需CMake版本 xff08 cmake minimum requi
  • CMakeLists.txt ----find_package

    在linux平台下编译程序的时候通常都会使用到CMakeLists txt来制定编译规则 在查找需要链接的lib时候 通常会使用到find package 记录一下我之前用到的地方 find package 之后 最好到FindXXX cm
  • CMakeLists.txt文件

    举例说明 xff1a CMake 构建 HelloSlam 工程 1 Ctrl 43 Alt 43 T 按键打开终端 2 在选定路径下建立工程文件夹 xff1a mkdir HelloSlam 3 构建 HelloSlam 的文件目录结构
  • CMakeLIsts.txt与Makefile的区别

    CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automake CMake 使
  • 关于Cmake与CmakeLists(一)--背景,须知,示例

    一 背景及须知 1 背景 xff1a VS2019与VS2010在编写程序时都是创建了一个工程 xff0c 然后直接打开 sln即可 但是vscode仅仅是一个编辑器 xff0c 打开之后只有 c或者 cpp文件 xff0c 故需要手动编译
  • Cmakelists 使用 gcc/g++

    转载 https blog csdn net afei article details 81201039 常用变量 预定义变量 PROJECT SOURCE DIR xff1a 工程的根目录 PROJECT BINARY DIR xff1a
  • ROS中的CMakeLists.txt

    在 ROS的编程过程中 xff0c 如果 CMakeLists txt如果写不好 xff0c 编译就很难成功 如果看不懂 CMakeLists txt那么很多错误你也不知道时什么回事 所以深入了解它是很右必要的 现在我们就来看看它 我们使用
  • cmake & CMakeLists.txt

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

    我平时一般是在windows使用VS编程 xff0c 但是偶尔在网上查资料的时候也会下载一些别人的代码 xff0c 其中就经常对CMakeLists txt和Makefile文件产生疑惑 xff0c 下面我来分析一下这两个经常使用的地方 C
  • gcc、make、makefile、cmake、cmakelists区别

    转自 xff1a http www zhihu com question 36609459 辉常哥 1 gcc是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • Makefile以及CMakelists的编辑

    1 概念 在linux中不像windows和mac有图形界面 xff0c 怎么快速的用命令行运行大型项目成为一个问题 xff0c 并且像c c 43 43 需要自己添加include文件的位置 xff0c 当文件数目变多的时候 xff0c

随机推荐

  • cartographer之ceres编译

    1 首先下载ceres xff1b 2 进入ceres目录 xff1b 3 mkdir build amp amp cd build 4 cmake DEIGENSPARSE 5 make 6 sudo make install
  • 一个空文件夹和空文件占多少空间?

    用于显示文件夹和文件大小的命令 span class token function du span h 显示目前在 Linux 系统上的文件系统磁盘使用情况统计 span class token function df span i 一 问
  • 虚拟地址如何访问到物理地址

    环境 xff1a 32bit CPU 一 通过二级页表映射的方式访问物理地址 1 取一级页表的基地址Abase1 2 取虚拟地址的前12bit 31 20 地址O1 3 计算得到新地址Apgd 61 Abase1 amp 0xFFFFF00
  • 添加自定义的section

    一 基本知识点 编译出来的程序 xff08 o so exe ko等等 xff09 都是以elf格式进行排列保存的 elf文件分析情况 xff1a https blog csdn net edonlii article details 87
  • 如何打印堆栈

    一 打印堆栈可以方便问题定位 xff0c 找到具体的函数调用流程 二 打印堆栈的方法 2 1 用户态 include lt stdio h gt include lt stdlib h gt include lt stddef h gt i
  • 内存飞踩问题的几点思考

    1 程序编译 xff0c 链接后生成二进制可执行程序 二进制可执行文件以elf格式实现排列 可以通过readelf S xxxx查看具体section的划分 xff0c 粗略划分如下图所示 在这些section中 xff0c 代码段是只读的
  • CFS调度算法

    1 CFS调度算法 xff0c 顾名思义就是完全公平调度策略 比方说 xff0c 调度延迟时间是10ms xff0c 存在两个进程A和B xff0c 那么两个进程分别占用CPU的时间是5ms 然而 xff0c 阶级总是存在的 xff0c 毕
  • ARM处理器的异常模式

    1 ARM处理器有各种异常模式 xff0c 用于应对ARM出现的不同状态 出现异常时 xff0c 会随即进入相关的异常向量 xff0c 同时CPSR的寄存器也会设置成具体的模式 例 xff1a 当出现中断时 xff0c 不管是哪种中断 xf
  • 内核态和用户态相关的内存泄漏

    应用程序通过系统调用进入内核态代码 假如内核态代码存在内存泄漏 xff0c 此内存泄漏属于内核态还是用户态 xff1f 查看内核态和用户态的统计信息
  • 为什么在telnet登入界面下没有日志输出?

    1 每个进程的输入输出导向目标都可以在进程号下的fd软链接上查看 如 569号进程的输出目标是 dev console xff0c 即串口 其中0是标准输入 xff0c 1是标准输出 xff0c 2是标准错误输出 2 因此我们只需要查看te
  • 【无标题】

    1 将虚拟地址传入到内核态 xff0c 借助内核态中mm struct结构体的pgd页表基地址成员 xff0c 经过查页表的方式最终获取到物理地址 这种方法虽然很直观 xff0c 但是一会内核态 xff0c 一会用户态 xff0c 操作起来
  • C#串口=>发送和接收

    作用 xff1a 串口发送命令后 xff0c 等待下位机应答帧 代码 xff1a 一旦读取到数据就立即返回给上层 public string TXandRX byte buffer string data 发送 RS485专用 start
  • kprobe功能的代码实现

    1 可以借助 sys kernel debug tracing目录下的文件 xff0c linux提供了kprobes功能 xff0c 抓取内核函数中的入参和返回值 kprobes xff0c 强大的调试工具 sydyh43的博客 CSDN
  • 上位机使用C++通过ADS协议与倍福PLC通信例程-通过变量名方式读写浮点数

    前言 建议初学者先看这一章节内容 xff0c 里面包括一些基础的环境配置和项目建立流程 xff0c 以后开发项目这些流程是通用的 xff0c 务必掌握并熟练 链接 上位机使用C 43 43 通过ADS协议与倍福PLC通信例程 布尔变量的读取
  • 弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE)

    下面通过485半双工的通信过程 xff0c 记录USART串口的几个使能位 标志位 说明 xff1a USART IT TC 和 USART IT RXNE是一个常量 xff0c 并不代表 xff08 TC RXNE 这两位 define
  • 机器人视觉检测+跟踪:行人跟随过程中对目标提取特征+匹配

    今天上午也是没有很大的成效 xff0c 一直到下午睡醒 xff08 论好的睡眠的重要性 xff09 xff0c 在一篇帖子中看到一种新的写法 xff0c opencv3将IplImage转换为Mat格式的写法 xff0c 在我们的代码中采用
  • ubuntu firefox打不开网页

    检查ubuntu右上角联网开关是否打开 xff1a 需要勾选Enable Networking 如果能ping通其它主机地址 xff0c 浏览器却上不了网 xff0c 很有可能是dns域名解析的问题 查看域名配置文件 xff1a cat e
  • Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C 43 43 xff08 简略介绍及步骤 xff09 文章目录 Java如何利用JNI调用C 43 43 xff08 简略介绍及步骤 xff09 一 原理介绍二 详细步骤步骤一 xff1a 编写Java类步骤二
  • HttpParser解析节点遇到的不解问题

    HttpParser遇到table时 xff0c 解析时 xff0c 直接抽取th或者td xff0c thead和tbody解析或出现异常 比如 lt table gt lt thead gt lt tr gt 相关内容 lt tr gt
  • CMakeLists 理解

    CMakeLists 理解 最近发现其实之前对CMakeLists 理解不是很全面 xff0c 零零散散在网上看到的一些教程 xff0c 其实都是为了解决某个命令的问题 xff0c 要不然就是对一些命令的翻译理解 xff0c 实际上是很劝退