CMake - Eigen3_DIR-NOTFOUND - PullRequest
       44

CMake - Eigen3_DIR-NOTFOUND

1 голос
/ 07 февраля 2020

Я пытаюсь построить проект с CMake на Windows 10. Но я получаю эту ошибку часами:

Ошибка:

  CMake Error at of_dis/CMakeLists.txt:8 (FIND_PACKAGE):
  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.

  Could not find a package configuration file provided by "Eigen3" with any
  of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.

Я скачал Eigen, распаковал его и добавил новую переменную среды с именем EIGEN3_INCLUDE_DIR со значением C:\eigen-3.3.7\cmake. Также я добавил строку в файл CMake проекта, которая теперь выглядит следующим образом:

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(IMOT_OpticalFlow_Edges)

find_package(OpenCV REQUIRED)

add_subdirectory(of_dis)

include_directories(./of_dis ${OpenCV_INCLUDE_DIRS})
INCLUDE_DIRECTORIES ( "$ENV{EIGEN3_INCLUDE_DIR}" )

set(CMAKE_CXX_STANDARD 11)

#set(OpenCV_DIR "C:/opencv/opencv3.4.1/opencv-3.4.1/build/install")
set(OpenCV_DIR "C:/opencv/opencv3.4.1/opencv-3.4.1/build/install/x64/vc14/lib")

set(SOURCE_FILES src/main.cpp src/support/Place.cpp src/support/Line.cpp src/support/Argument.cpp
    src/support/FileOperations.cpp src/frame_processing/FrameProcessor.cpp src/flow_processing/FlowProcessor.cpp
    src/edge_processing/EdgeProcessor.cpp src/detection/Detector.cpp)

add_executable(IMOT_OpticalFlow_Edges ${SOURCE_FILES})

target_link_libraries(IMOT_OpticalFlow_Edges ${OpenCV_LIBS})

CMake GUI:

enter image description here

Я также скопировал файл FindEigen3.cmake в свой текущий проект. Но я все еще получаю ту же ошибку снова и снова. Есть ли способ это исправить?

1 Ответ

2 голосов
/ 07 февраля 2020

Чтобы суммировать комментарии для полноты:

Команда CMake find_package() имеет два режима работы: Модуль и Конфиг режим. По существу, эта ошибка говорит о том, что режим Module завершился ошибкой, затем режим Config не смог найти пакет Eigen3:

  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.

  Could not find a package configuration file provided by "Eigen3" with any
  of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.

В общем, когда пакет XXX (например, Eigen3) установлен, например, этот пакет должен настроить файл XXXConfig.cmake. Таким образом, внешние проекты могут найти и использовать пакет XXX, вызвав find_package() в режиме Config .

Поскольку ваш пакет Eigen3 был не установлен , файл Eigen3Config.cmake не был настроен. Таким образом, поиск в режиме Module должен работать для вас, так как в ваших каталогах Eigen3 существует только файл FindEigen3.cmake. Для режима Модуль путь к файлу FindEigen3.cmake должен быть добавлен к CMAKE_MODULE_PATH, как предполагает ошибка. Добавление этой строки до вызова find_package(Eigen3 ...) позволяет режиму CMake Module добиться успеха:

list(APPEND CMAKE_MODULE_PATH "C:/eigen-3.3.7/cmake")
...