【问题标题】:CMake does not set variables for g2oCMake 没有为 g2o 设置变量
【发布时间】:2021-08-02 11:33:10
【问题描述】:

在 macOS 11.0 上,我下载并构建了 g2o (https://github.com/RainerKuemmerle/g2o) 并使用 cmake --install . 安装它 然后我尝试通过 CMake 将它包含在我自己的项目中,如下所示(CMakeLists.txt):

cmake_minimum_required (VERSION 3.14)
project (MY-PROJECT)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# PkgConfig to find other packages easily
find_package(PkgConfig REQUIRED) 

# find required modules
pkg_check_modules(OpenCV REQUIRED opencv4)
find_package(Eigen3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(G2O REQUIRED)

message(STATUS "G2O FOUND: ")
message(STATUS ${G2O_FOUND}) # prints 1

message(STATUS "G2O INCLUDE DIRS: ")
message(STATUS ${G2O_INCLUDE_DIRS}) # prints nothing

message(STATUS "G2O Link Libraries: ")
message(STATUS ${G2O_LINK_LIBRARIES}) # prints nothing

message(STATUS "EIGEN3 INCLUDE DIRS: ")
message(STATUS ${EIGEN3_INCLUDE_DIRS}) # prints /usr/local/include/eigen3

CMake将G2O_FOUND设置为1,表示成功找到g2o。但是,未设置其他两个变量,因此找不到包含文件和库文件。我通过添加解决了这个问题

set(G2O_INCLUDE_DIRS
/usr/local/include)

set(G2O_LIBS
/usr/local/lib/libg2o_core.dylib
/usr/local/lib/libg2o_types_slam3d.dylib
#...
)

include_directories(
G2O_INCLUDE_DIRS  
)

target_link_libraries(
    MY-PROJECT
    ${G2O_LIBS}
)

到 CMakeLists.txt,但我仍然很好奇为什么 CMake 确实找到了 g2o 但没有相应地设置变量。

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    为什么 CMake 确实找到了 g2o 但没有相应地设置变量。

    FindG2O.cmake 没有设置这些变量,所以没有设置它们。检查要设置的G2O_FOUND 的变量是G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND

    没有规定 find_package 必须设置 _LIBRARIES_INCLUDE_DIRS 变量 - 每个包都有点不同,请查阅该特定包。如果写FindXXX文件,使用接口或导入库代替变量。

    【讨论】:

    • 到目前为止我使用的所有软件包都设置了这些变量,我只是假设将这些设置为正确的值是使用find_package() 的全部目的,因此在不同的系统上可以找到正确的路径。我也不知道变量是在FindXXX文件中设置的,所以下次我去看看。
    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多