Не удалось найти Eigen3 с CMake

Я в отчаянии: Для моих исследований мне нужно работать с Eigen и CMake. Я могу использовать Eigen, если я копирую всю библиотеку в каталогах, где мой компилятор выглядит по умолчанию, но как только я пытаюсь найти его через
find_package(Eigen3 REQUIRED)
Я получаю следующую ошибку:


CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find Eigen3 (missing: EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
  (Required is at least version "2.91.0")
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  FindEigen3.cmake:76 (find_package_handle_standard_args)
  CMakeLists.txt:8 (find_package)

-- Configuring incomplete, errors occurred!


теперь я искал решения, но все, что я пробовал (также те, которые доступны на stackoverflow:
найти пакет Eigen3 для CMake или CMake не может найти Eigen3 ) не работать. Моя собственная версия (согласно макросам в Core/util/Macros.h) является 3.2.5. Я держу каталог Eigen в /usr/local/include, Я использую FindEigen3.cmake который поставляется с библиотекой Eigen и my CMakeLists.txt выглядит следующим образом:


cmake_minimum_required(VERSION 2.8)
project(Test)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
message("Found Eigen3 in: ${EIGEN3_INCLUDE_DIR}")

add_executable(main test.cpp)

кто-нибудь знает, что происходит не так?

С наилучшими пожеланиями, Жюльен!--10-->

2 ответов


превращая мой комментарий в ответ

найти пакет скриптов-как FindEigen3.cmake - нормально использовать find_path() команда для обнаружения каталога include пакета (см. это документация для полной информации).

FindEigen3.cmake используется следующий фрагмент кода:

find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
    PATHS
    ${CMAKE_INSTALL_PREFIX}/include
    ${KDE4_INCLUDE_DIR}
    PATH_SUFFIXES eigen3 eigen
)

так это выглядит в CMAKE_INSTALL_PREFIX который на хостах Unix/Linux является /usr/local по умолчанию.

в для меня сработало следующее:

  • перейти к Eigen исходный каталог и запустите CMake и шаги установки

    > mkdir build
    > cd build
    > cmake ..
    > make install
    
  • тогда скопируйте - как вы сделали -FindEigen3.cmake в исходный каталог ваших проектов.

  • теперь ваш код находит Eigen (только что изменено на list(APPEND ...))

    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
    find_package(Eigen3 REQUIRED)
    

ссылки


добавить путь FindEigen3.cmake до find_package(Eigen3 REQUIRED), например:

LIST(APPEND CMAKE_MODULE_PATH "/usr/share/cmake-2.8/Modules/")
find_package(Eigen3)