linux_cmake的笔记

include_directories()的使用

今天在运行一个cmakelist.txt如下所示时候,发现一个问题:

cmake_minimum_required(VERSION 3.28)
project(l_trajectoryError CXX)
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
find_package(Pangolin REQUIRED)
find_package(Sophus REQUIRED)
# if(USE_UBUNTU_20)
#     message("You are using Ubuntu 20.04, fmt::fmt will be linked")
#     find_package(fmt REQUIRED)
#     set(FMT_LIBRARIES fmt::fmt)
# endif()
message(STATUS "Souph_INCLUDE_DIRS: ${Sophus_INCLUDE_DIRS}")
include_directories(${Pangolin_INCLUDE_DIRS})
include_directories(${Sophus_INCLUDE_DIRS})
add_executable(l_trajectoryError l_trajectoryError.cpp)
target_link_libraries(l_trajectoryError ${Pangolin_LIBRARIES})

执行cmake ..命令出现下图所示提示信息:
在这里插入图片描述
图中红色标记的路径是我以前sudo make install命令后安装到系统层面的sophus文件夹路径,但这个版本和我现在代码用的版本不一致,按道理使用这个路径的sophus库肯定有报错,不可能运行,所以引发我的深思。
后面我把cmakelist文件中的include_directories(${Sophus_INCLUDE_DIRS})代码注释了,项目依然能很好的编译和运行,也就是项目没有使用find_package(Sophus REQUIRED)找到的sophus头文件。

回到我的项目代码中,我的include用的是项目中的sophus得完整相对路径,也就是编译的时候可能就自动选择了这个路径下的sophus头文件。

在这里插入图片描述
那么include_directories()作用到底是什么,它是指定非标准库的头文件具体位置,但为什么上述情况这么特殊?
下图分别是一个cmakelist文件和项目文件。
在这里插入图片描述
在这里插入图片描述
cmakelist文件中的include_directories(“/usr/include/eigen3”),而项目文件中的include是
#include <Eigen/Core>
#include <Eigen/Geometry>,而实际eigen储存位置如下图红线所示:
在这里插入图片描述
我悟了:
项目中我们这样写include,编辑器能找到eigen所在位置是因为我们在c_cpp_properties.json文件中注明了includepath,如下图所示:
在这里插入图片描述
所以项目中这样写:#include <Eigen/Core> #include<Eigen/Geometry>会自动到includepath中包含的路径中递归搜索,也就找到了,也就是这个include是不全的路径,而Cmakelist文件中的include_directories(“/usr/include/eigen3”)补全了完整路径的剩余部分,让cmake能够知到eigen3的完整路径,符合逻辑!!!
因此,假如我们在项目文件中用#include “/usr/include/eigen3/Eigen/Core”
#include “/usr/include/eigen3/Eigen/Geometry"代替,则cmakelist中include_directories(”/usr/include/eigen3")
部分内容就可以注释且不会编译运行有影响!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文略读:If Multi-Agent Debate is the Answer, What is the Question?

202502 arxiv 1 intro 多智能体辩论&#xff08;Multi-Agent Debate, MAD&#xff09;&#xff1a;通过让多个智能体在大模型推理时展开多轮辩论&#xff0c;可提升生成内容的事实准确性和推理质量 但论文认为&#xff0c;目前多智能体辩论在大多数情况下不敌简单的单智能体方…

使用RUST在Arduino上进行编程(MacOS,mega板)

近年来&#xff0c;RUST成为了嵌入式编程的热门语言&#xff0c;本文通过实现&#xff08;1&#xff09;LED闪灯&#xff0c;以及&#xff08;2&#xff09;在console&#xff08;终端&#xff09;实现“Hello Rust World”两项功能来完成实操的入门。 深入学习可以参考RUST语言…

(15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event

&#xff08;1&#xff09;起因来源于 4.11 的老师讲的例题&#xff0c;标准的&#xff0c;规范的使用右键菜单的代码及参考资料如下&#xff1a; &#xff08;2&#xff09; 接着脱离上面的那个复杂的环境&#xff0c;用简单的例子测试一下 &#xff1a; 说明老师讲的都是对…

C 语言学习笔记(指针4)

内容提要 指针 函数指针与指针函数二级指针 指针 函数指针与指针函数 函数指针 定义 函数指针本质上是指针&#xff0c;是一个指向函数的指针。函数都有一个入口地址&#xff0c;所谓指向函数的指针&#xff0c;就是指向函数的入口地址。&#xff08;这里的函数名就代表…

C#串口打印机:控制类开发与实战

C#串口打印机&#xff1a;控制类开发与实战 一、引言 在嵌入式设备、POS 终端、工业控制等场景中&#xff0c;串口打印机因其稳定的通信性能和广泛的兼容性&#xff0c;仍是重要的数据输出设备。本文基于 C# 语言&#xff0c;深度解析一个完整的串口打印机控制类Printer&…

通过vue-pdf和print-js实现PDF和图片在线预览

npm install vue-pdf npm install print-js <template><div><!-- PDF 预览模态框 --><a-modal:visible"showDialog":footer"null"cancel"handleCancel":width"800":maskClosable"true":keyboard"…

SQL解析工具JSQLParser

目录 一、引言二、JSQLParser常见类2.1 Class Diagram2.2 Statement2.3 Expression2.4 Select2.5 Update2.6 Delete2.7 Insert2.8 PlainSelect2.9 SetOperationList2.10 ParenthesedSelect2.11 FromItem2.12 Table2.13 ParenthesedFromItem2.14 SelectItem2.15 BinaryExpressio…

安装完dockers后就无法联网了,执行sudo nmcli con up Company-WiFi,一直在加载中

Docker服务状态检查 执行 systemctl status docker 确认服务是否正常 若未运行&#xff0c;使用 sudo systemctl start docker && sudo systemctl enable docker 网络配置冲突 Docker会创建docker0虚拟网桥&#xff0c;可能与宿主机网络冲突 检查路由表 ip route sho…

Docker 运维管理

Docker 运维管理 一、Swarm集群管理1.1 Swarm的核心概念1.1.1 集群1.1.2 节点1.1.3 服务和任务1.1.4 负载均衡 1.2 Swarm安装准备工作创建集群添加工作节点到集群发布服务到集群扩展一个或多个服务从集群中删除服务ssh免密登录 二、Docker Compose与 Swarm 一起使用 Compose 三…

软媒魔方——一款集合多种系统辅助组件的软件

停更4年&#xff0c;但依旧吊炸天&#xff01; 亲们&#xff0c;是不是觉得电脑用久了就像老牛拉车&#xff0c;慢得让人着急&#xff1f;别急&#xff0c;我今天要给大家安利一个超好用的电脑优化神器——软媒魔方&#xff01; 软件介绍 首先&#xff0c;这货真心是免费的&a…

upload-labs通关笔记-第19关文件上传之条件竞争

目录 一、条件竞争 二、源码分析 1、源码分析 2、攻击原理 3、渗透思路 三、实战渗透 1、构造脚本 2、制作图片马 3、获取上传脚本URL 4、构造访问母狼脚本的Python代码 5、bp不断并发上传母狼图片马 &#xff08;1&#xff09;开启专业版bp &#xff08;2&#xf…

分布式消息队列kafka详解

分布式消息队列kafka详解 引言 Apache Kafka是一个开源的分布式事件流平台&#xff0c;最初由LinkedIn开发&#xff0c;现已成为处理高吞吐量、实时数据流的行业标准。Kafka不仅仅是一个消息队列&#xff0c;更是一个完整的分布式流处理平台&#xff0c;能够发布、订阅、存储…

uni-app(3):互相引用

1 绝对路径和相对路径 在日常开发中&#xff0c;经常会遇到使用绝对路径还是相对路径的问题&#xff0c;下面我们介绍下这两种路径。 1.1 绝对路径 绝对路径&#xff1a;是指从项目根目录开始的完整路径。它用于指定文件或目录的确切位置。绝对路径通常以斜杠&#xff08;/&am…

python与flask框架

一、理论 Flask是一个轻量级的web框架&#xff0c;灵活易用。提供构建web应用所需的核心工具。 Flask依赖python的两个库 Werkzeug&#xff1a;flask的底层库&#xff0c;提供了WSGI接口、HTTP请求和响应处理、路由等核心功能。 Jinja2&#xff1a;模板引擎&#xff0…

esp32-idf框架学习笔记/教程

esp32型号: 环境搭建 安装:就按这个来,别的试了好多次都不行,这个一次成功!!!! vscode下ESP32开发环境配置&#xff08;100%成功&#xff09;_哔哩哔哩_bilibili esp芯片的两种模式: ESP32 固件烧录教程_哔哩哔哩_bilibili 1.运行模式 2.下载模式 esp32s3程序下载 1.数据…

VKontakte(VK)注册教程

VKontakte&#xff08;简称VK&#xff09;是俄罗斯最大的社交网络平台&#xff0c;类似于Facebook&#xff0c;用户可以通过它进行社交、分享图片、视频、音乐等内容&#xff0c;并参与各类社群讨论&#xff0c;是与俄罗斯及其他东欧地区的朋友建立联系的便捷平台。对于做俄罗斯…

STM32+ESP8266+ONENET+微信小程序上传数据下发指令避坑指南

之前只做过类似的但是以为这种烂大街的功能应该不难结果还是踩了不少坑&#xff0c;记录几个需要注意的点 首先贴一个非常有用的视频&#xff0c;里面讲的很详细&#xff0c;给的资料也很全【【新版OneNet云平台】STM32ESP8266上传数据&#xff0c;简单易上手&#xff01;】 h…

【知识点】关于vue3中markRow、shallowRef、shallowReactive的了解

首先我们先了解一下这三个函数的定义以及区别 markRow 定义&#xff1a; 一个用于标记对象为非响应式的工具函数 shallowRef 定义&#xff1a; 一个用于创建浅层响应式引用的函数&#xff0c;只对 .value 本身进行响应式处理&#xff0c;不会递归地将 .value 指向的对象或…

后端开发实习生-抖音生活服务

职位描述 ByteIntern&#xff1a;面向2026届毕业生&#xff08;2025年9月-2026年8月期间毕业&#xff09;&#xff0c;为符合岗位要求的同学提供转正机会。 团队介绍&#xff1a;生活服务业务依托于抖音、抖音极速版等平台&#xff0c;致力于促进用户与本地服务的连接。过去一…

OceanBase 共享存储:云原生数据库的存储

目录 探会——第三届 OceanBase 开发者大会 重磅发布&#xff1a;OceanBase 4.3 开发者生态全面升级 实战演讲&#xff1a;用户案例与行业落地 OceanBase 共享存储架构解析 什么是共享存储架构&#xff1f; 云原生数据库的架构 性能、弹性与多云的统一 为何OceanBase能…