无法使用 CMake 找到 Eigen3
Unable to find Eigen3 with 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)</p>
<p>-- Configuring incomplete, errors occurred!
现在我搜索了解决方案,但我尝试了所有这些(还有那些在 Whosebug 上可用的:
Find package Eigen3 for CMake
要么
CMake Can't find Eigen3)
不工作。
我的 Eigen 版本(根据 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)
有人知道出了什么问题吗?
亲切的问候,
朱利安
将我的评论变成答案
查找包脚本 - 如 FindEigen3.cmake
- 通常使用 find_path()
命令来检测包的包含目录(有关完整详细信息,请参阅 it's documentation)。
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)
参考资料
- Eigen & CMake
- CMake: Of what use is find_package() if you need to specify CMAKE_MODULE_PATH anyway?
- Cmake doesn't find Boost
在find_package(Eigen3 REQUIRED)
之前添加FindEigen3.cmake
的路径,像这样:
LIST(APPEND CMAKE_MODULE_PATH "/usr/share/cmake-2.8/Modules/")
find_package(Eigen3)
我有点绝望:
对于我的学习,我需要使用 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)</p>
<p>-- Configuring incomplete, errors occurred!
现在我搜索了解决方案,但我尝试了所有这些(还有那些在 Whosebug 上可用的:
Find package Eigen3 for CMake
要么
CMake Can't find Eigen3)
不工作。
我的 Eigen 版本(根据 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)
有人知道出了什么问题吗?
亲切的问候, 朱利安
将我的评论变成答案
查找包脚本 - 如 FindEigen3.cmake
- 通常使用 find_path()
命令来检测包的包含目录(有关完整详细信息,请参阅 it's documentation)。
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)
参考资料
- Eigen & CMake
- CMake: Of what use is find_package() if you need to specify CMAKE_MODULE_PATH anyway?
- Cmake doesn't find Boost
在find_package(Eigen3 REQUIRED)
之前添加FindEigen3.cmake
的路径,像这样:
LIST(APPEND CMAKE_MODULE_PATH "/usr/share/cmake-2.8/Modules/")
find_package(Eigen3)