You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake无法找到G2O包及头文件的编译问题排查

解决g2o头文件找不到的CMake配置问题

项目结构

scan_inconsistency
|-- CMakeLists.txt
|-- build
|-- cmake_modules
|-- libs
|   |-- CMakeLists.txt
|   |-- consist
|   `-- g2o
`-- src
    |-- CMakeLists.txt
    `-- main.cpp

背景与问题

consist包已完成Qt5适配、Eigen路径调整等修改,g2o是consist的依赖,cmake_modules目录复制自consist/cmake并修改。编译时遇到两个问题:

  1. 单独编译consist时,make阶段提示找不到g2o/core/sparse_optimizer.h
  2. 编译顶层CMakeLists.txt时,make阶段提示找不到g2o/core/optimizable_graph.h

CMakeLists调整方案

1. 顶层CMakeLists.txt修改

确保自定义cmake模块路径被识别,提前查找g2o并全局传递依赖信息:

cmake_minimum_required(VERSION 3.10)
project(scan_inconsistency)

# 将自定义cmake_modules加入模块搜索路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake_modules)

# 查找g2o依赖,全局设置头文件和库路径
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIR})
link_directories(${G2O_LIBRARY_DIR})

# 编译子项目
add_subdirectory(libs)
add_subdirectory(src)

2. libs/CMakeLists.txt修改

调整编译顺序,保证g2o先编译完成,同时给consist明确传递g2o依赖:

# 优先编译g2o子项目
add_subdirectory(g2o)

# 编译consist
add_subdirectory(consist)

# 给consist添加g2o头文件路径
target_include_directories(consist PUBLIC ${G2O_INCLUDE_DIR})
# 将g2o库链接到consist
target_link_libraries(consist PUBLIC ${G2O_LIBRARIES})

3. src/CMakeLists.txt修改

确保主程序能继承consist的g2o依赖,必要时显式添加头文件路径:

add_executable(scan_inconsistency main.cpp)

# 链接consist库,自动继承其g2o依赖
target_link_libraries(scan_inconsistency PRIVATE consist)

# 若仍存在头文件找不到问题,显式添加g2o头文件路径
target_include_directories(scan_inconsistency PRIVATE ${G2O_INCLUDE_DIR})

4. 单独编译consist的补充配置

如果需要单独编译consist,需在consist/CMakeLists.txt中添加g2o的查找逻辑:

# 加入g2o查找
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIR})

额外检查点

  • 确认cmake_modules/FindG2O.cmake配置正确,能正确识别g2o的include和lib目录
  • 确保g2o已正确编译,其头文件和库文件路径与CMake查找结果一致

内容的提问来源于stack exchange,提问作者Shrinivas Iyengar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:18