gpt4 book ai didi

c++ - CMake查找特征不正确的结果

转载 作者:行者123 更新时间:2023-12-02 10:23:33 25 4
gpt4 key购买 nike

我正在尝试使用 Eigen 编译代码片段使用 CMake,但 CMake 似乎很难找到正确的路径,即使源代码在那里。

这是我的CMakeLists.txt文件。

cmake_minimum_required(VERSION 3.14.2)
project(test)

# set default build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()


find_package(OpenCV 3 REQUIRED)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)

include_directories(
include
${OpenCV_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
)


add_executable(playground playground.cpp)
target_link_libraries(playground ${OpenCV_LIBS} Eigen3::Eigen)

这就是我在 playground.cpp 中导入 header 的方式:
#include <iostream>
#include <vector>
#include <map>
#include <math.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <string>
#include <Eigen>

我的 Eigen安装在 /usr/include/eigen3 下,这里是目录结构:
yuqiong@yuqiong-G7-7588:/usr/include/eigen3$ ls
Eigen signature_of_eigen3_matrix_library unsupported

所以 Eigen 库的正确路径是 /usr/include/eigen3/Eigen .

但是,当我运行 cmake ..然后 make对于上述 CMakeLists.txt文件,带有 -LH标志,CMake 提示找不到 Eigen .这是它认为的路径 Eigen是:
yuqiong@yuqiong-G7-7588:/media/yuqiong/DATA/vignetting/catkin_ws/src/vig2/src/build$ cmake -LH ..
-- Configuring done
-- Generating done
-- Build files have been written to: /media/yuqiong/DATA/vignetting/catkin_ws/src/vig2/src/build
-- Cache values
// Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=

// Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local

// The directory containing a CMake configuration file for Eigen3.
Eigen3_DIR:PATH=/usr/local/share/eigen3/cmake

// The directory containing a CMake configuration file for OpenCV.
OpenCV_DIR:PATH=/opt/ros/kinetic/share/OpenCV-3.3.1-dev

这是它认为 Eigen 所在的文件夹的结构:
yuqiong@yuqiong-G7-7588:/usr/local/share/eigen3$ tree
.
└── cmake
├── Eigen3Config.cmake
├── Eigen3ConfigVersion.cmake
├── Eigen3Targets.cmake
└── UseEigen3.cmake

我很困惑为什么 CMake 有这样的行为?如何让它找到 Eigen的正确路径在这种情况下?

所有这些环境设置都很难做到正确......

最佳答案

感谢上面的评论。我认为问题可能是 Eigen团队在不同版本之间以某种方式改变了他们的目录结构,旧的包含路径不再起作用。

我的解决方案是更改 #include <Eigen/Dense>#include <eigen3/Eigen/Dense> .之后g++CMake可以找到路径。

我确实安装了 Eigen关注 this official doc ,这就是为什么我很惊讶安装仍然有问题。

This回答解决了我的问题。

This回答也解决了问题。

另一方面,我的 CMake 文件有点乱,两个 include_directoriestarget_link_libraries .

关于c++ - CMake查找特征不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57865329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com