【发布时间】:2016-03-12 08:51:31
【问题描述】:
我有点绝望:
对于我的学习,我需要使用 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 上可用的解决方案:
Find package Eigen3 for CMake
要么
CMake Can't find Eigen3)
不工作。
我的特征版本(根据Core/util/Macros.h 中的宏)是 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)
有人知道出了什么问题吗?
亲切的问候, 朱利安
【问题讨论】:
-
欢迎来到 StackOverflow。查找包脚本通常使用
find_path()命令来检测包的包含目录。如果没有自动找到,您可以通过 CMake 应该搜索的路径扩展CMAKE_INCLUDE_PATH(例如参见 here)。因此,您可以在find_package()命令之前添加类似list(APPEND CMAKE_INCLUDE_PATH "/usr/local/include")的内容。 -
谢谢!如果我将确切路径添加到
CMAKE_INCLUDE_PATH,它会找到包 - 但不是手动搜索我想要避免的东西吗?find_package()不应该为我这样做吗? -
你是对的。
CMAKE_INCLUDE_PATH用于非标准的Eigen安装路径。我已经尝试过您的代码示例,并且 - 如果我将Eigen安装到默认路径中 - 它似乎无需提供路径即可工作(请参阅我的答案)。如果您已经使用了Eigen安装过程,能否请您添加更多关于您的环境的详细信息(CMake 版本、CMake 命令行调用、主机操作系统、编译器版本……)? -
好奇,这是关于 caffe 和 AI 的吗?