我想在Ubuntu 18.04上的C++ 11项目中使用g2o库,但是无法使构建正常工作。我有所有的依赖关系。但是我无法通过CMakeLists.txt将g2o库链接到我的项目

我是C++依赖项的新手。

我尝试克隆https://github.com/RainerKuemmerle/g2o存储库并使用cmake构建它。

结构如下:

MY_PROJECT
|__ cmake_modules
|__ project_src
|__ CMakeLists.txt

|__ Thirdparty
   |____ g2o
       |____ bin
       |____ build
       |____ cmake_modules # findG2O.cmake
       |____ lib # .so shared libraries (all of them, like 20)
       |____ g2o
            |____ core # headers and source files
            |____ solvers
            |____ types
       |____ CMakeLists.txt

我从g2o内部将cmake_modules添加到my_project的CMakeLists.txt中
然后尝试使用find_package找到它,但找不到它。
LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/g2o/cmake_modules)


find_package(G2O REQUIRED)
if(NOT G2O_FOUND)
   message(FATAL_ERROR "G2O not found.")
endif()

我保留了https://github.com/RainerKuemmerle/g2o/blob/master/cmake_modules/FindG2O.cmake中的findG2O.cmake不变

我应该更改find​​G2O.cmake吗?我不太了解发生了什么。我应该如何继续进行源代码构建和链接?

我在StackOverflow的任何地方都没有找到我的问题的精确答案,但也许我只是不知道自己在寻找什么。

错误消息为:
/home/miki/ORB_SLAM2/Thirdparty/g2o/g2o/types/sim3/types_seven_dof_expmap.h:29:10: fatal error: g2o/config.h: No such file or directory #include "g2o/config.h"

当我尝试更改为#include“../../config.h”时,它起作用了。如何解决CMakeLists中的问题,因此不必更改ThirdParty库中的所有包含项?

最佳答案

执行命令后生成config.h

 cmake ..
在文件夹中
MY_PROJECT/Thirdparty/g2o/build
,并且此文件包含一些信息,例如您尝试使用哪种类型的已使用浮点或库。我认为此类信息将用于自动修改某些代码块。
默认情况下,文件config.h的位置在文件夹中
MY_PROJECT/Thirdparty/g2o/build/g2o
或者您也可以使用以下命令
 make install
将此文件复制到安装路径。
如果您的$ {CMAKE_PREFIX_INTALL}是/ home / user /,则文件config.h的位置在文件夹中
/home/user/include/g2o
而且,如果您想使用find_package查找g2o库,则需要编写
set (G2O_ROOT  /home/user)
在find_package之前。
最后,将 header 路径添加到CMakeLists.txt中,例如
include_directories(${G2O_INCLUDE_DIR}

08-26 19:18