Ich bin ein bisschen verzweifelt finden: Für mein Studium brauche ich für die Arbeit mit Eigen und CMake. Ich bin in der Lage Eigen zu verwenden, wenn ich die ganze Bibliothek in die Verzeichnisse kopieren, in dem mein Compiler standardmäßig aussieht, aber sobald ich versuche, es zu finden, über
find_package(Eigen3 REQUIRED)
ich die folgende Fehlermeldung erhalten: kann nicht Eigen3 mit CMake
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!
nun suchte ich nach Lösungen, aber alles, was ich die, die ich versuchte (auch diejenigen, auf Stackoverflow:
Find package Eigen3 for CMake oder CMake Can't find Eigen3) haben nicht funktioniert. Mein Eigen Version (nach den Makros in Core/util/Macros.h
) ist 3.2.5. ich das Verzeichnis Eigen halten in /usr/local/include
, verwende ich die FindEigen3.cmake
, die mit der Eigen-Bibliothek kommt und meine CMakeLists.txt
sieht wie folgt aus:
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)
Hat jemand eine Idee, was falsch läuft?
Mit freundlichen Grüßen, Julien
Willkommen bei Stackoverflow. Die Suchpaket-Skripts verwenden normalerweise den Befehl ['find_path()'] (https://cmake.org/cmake/help/v3.4/command/find_path.html), um das Include-Verzeichnis des Pakets zu erkennen. Wenn es nicht automatisch gefunden wird, können Sie ['CMAKE_INCLUDE_PATH'] (https://cmake.org/cmake/help/v3.4/variable/CMAKE_INCLUDE_PATH.html) um den Pfad erweitern, in dem CMake suchen soll (siehe zB [hier]). (http://stackoverflow.com/questions/3808775/cmake-doesnt-find-boost)). Sie könnten also etwas wie "list (APPEND CMAKE_INCLUDE_PATH"/usr/local/include ") vor Ihrem' find_package() 'Befehl einfügen. – Florian
Danke! Wenn ich den genauen Pfad zum 'CMAKE_INCLUDE_PATH 'hinzufüge, findet es das Paket - aber sucht nicht manuell genau, was ich vermeiden will? Sollte das 'find_package()' das nicht für mich tun? – Julien
Sie haben Recht. Der 'CMAKE_INCLUDE_PATH' war für einen nicht standardmäßigen' Eigen'-Installationspfad gedacht. Ich habe Ihrem Code-Beispiel einen Versuch gegeben und - wenn ich "Eigen" in den Standardpfad installiere - scheint es zu funktionieren, ohne den Pfad angeben zu müssen (siehe meine Antwort). Wenn Sie den 'Eigen'-Installationsprozess bereits verwendet haben, könnten Sie bitte weitere Details zu Ihrer Umgebung hinzufügen (CMake-Version, CMake-Befehlszeilenaufruf, Host-Betriebssystem, Compiler-Version, ...)? – Florian