当前位置: 首页 > news >正文

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")
部分内容就可以注释且不会编译运行有影响!

相关文章:

  • 2025年——ComfyUI_连接HuggingFace及更改缓存路径
  • rosbridge_suit、roslibpy 源码阅读与简单测试 —— 图片编解码与传输
  • linux初识--基础指令
  • 并发编程艺术--底层原理
  • 中科驭数携DPU全栈产品亮相福州数博会,赋能智算时代算力基建
  • 关于 Web 风险点原理与利用:6. 逻辑风险点
  • SpringBoot3整合WebSocket
  • AI大模型和SpringAI简介
  • 各类Agent技术的发展现状和核心痛点
  • 银基固态电池硬件解析
  • 暗黑科技感风格智慧工地监管系统
  • C++ 结构体封装模式与 Promise 链式调用:设计思想的异曲同工
  • Python实例题:使用Python实现深度神经网络
  • SQL解析工具JSQLParser
  • 《进化陷阱》--AI 生成文章 《连载 1》
  • JFace中MVC的表格使用介绍
  • Web前端大模型实战:端侧翻译+朗读流程线+模型音频数据编码 - 让网站快速支持多语言多模态输出
  • 基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建及典型案例应用
  • python打卡训练营打卡记录day34
  • Attu下载 Mac版与Win版
  • 国土局网站建设制度/搜索引擎优化课程
  • 个人网站开发工具/域名服务器ip地址查询
  • 网站建设的新闻/郑州百度推广公司地址
  • 网站中的文字滑动怎么做的/电脑培训机构
  • wordpress 默认编辑器/seo软件工具
  • 网站开发什么语言比较好/湖南网站推广公司