I am kind of desperate:
For my studies I need to work with Eigen and CMake. I'm able to use Eigen if I copy the whole library in the directories where my compiler looks by default but as soon as I try to find it via
find_package(Eigen3 REQUIRED)
I get the following error:
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)
-- 配置不完整,出现错误!
现在我正在寻找解决方案,但我尝试过的所有方法(包括stackoverflow上可用的方法:
为CMake查找Eigen3软件包
或者
CMake无法找到Eigen3)
都没有起作用。
根据Core/util/Macros.h
中的宏,我的Eigen版本是3.2.5。
我将Eigen目录保留在/usr/local/include
中,我使用随Eigen库提供的FindEigen3.cmake
,我的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)
有人知道出了什么问题吗?
亲切的问候, 朱利安
find_path()
命令来检测包含目录。如果没有自动发现,您可以通过将路径添加到CMAKE_INCLUDE_PATH
来扩展搜索路径(例如请参考这里)。因此,在find_package()
命令之前添加类似于list(APPEND CMAKE_INCLUDE_PATH "/usr/local/include")
的内容即可。 - FlorianCMAKE_INCLUDE_PATH
中,它就可以找到该软件包 - 但是手动搜索不正是我想要避免的吗?难道find_package()
不应该替我完成这项任务吗? - CryorisCMAKE_INCLUDE_PATH
是为非标准的Eigen
安装路径而设计的。我已经尝试了你的代码示例,如果我将Eigen
安装到默认路径下,似乎不需要提供路径就可以正常工作(请参见我的答案)。如果您已经使用了Eigen
的安装过程,请在您的环境中添加更多详细信息(例如 CMake 版本、CMake 命令行调用、主机操作系统、编译器版本等)。 - Florian