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
繁體地址,請注明出處:http://hk.pswp.cn/news/906696.shtml
英文地址,請注明出處:http://en.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能…