CMake找不到我的Eigen3包。我设置了一个环境变量,称为
EIGEN3_INCLUDE_DIR指向FindEigen3.cmake所在的路径。
然后我在CMakelists.txt中写道:
find_package( Eigen3 REQUIRED )
include_directories( EIGEN3_INCLUDE_DIR )我收到了下一条错误信息:
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:91 (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):
C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:252 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindEigen3.cmake:76 (find_package_handle_standard_args)
test/test_quaternion/CMakeLists.txt:25 (find_package)知道我错过了什么或者做错了什么吗?
发布于 2012-09-04 07:40:54
因为Eigen3是完全标头的,所以您所需要的只是包含目录的路径。这一次,你已经在手动定义了。因此,不需要FindEigen3.cmake或FIND_PACKAGE调用。
简单地使用
INCLUDE_DIRECTORIES ( "$ENV{EIGEN3_INCLUDE_DIR}" )或
SET( EIGEN3_INCLUDE_DIR "$ENV{EIGEN3_INCLUDE_DIR}" )
IF( NOT EIGEN3_INCLUDE_DIR )
MESSAGE( FATAL_ERROR "Please point the environment variable EIGEN3_INCLUDE_DIR to the include directory of your Eigen3 installation.")
ENDIF()
INCLUDE_DIRECTORIES ( "${EIGEN3_INCLUDE_DIR}" )几个注意事项:
${...}$ENV{....}访问环境变量。CMAKE_MODULE_PATH指向它所在的目录。不确定,但可能是CMake也会自动检查当前目录( CMakeLists.txt所在的位置)。无论如何,设置EIGEN3_INCLUDE_DIR与FindEigen3.cmake的位置完全无关。FindEigen3脚本可能会对此变量进行评估,以确定Eigen3安装的位置。<PackageName>Config.cmake。如果将名为<PackageName>_DIR的变量指向包含此文件的目录,则可以正常使用FIND_PACKAGE( <PackageName> ...)。详情请参见包装。发布于 2018-09-07 22:12:24
Eigen >= 3.3具有直接的CMake集成,因此您的CMake设置似乎不正确。
假设/opt/eigen/3.3已安装了带有默认设置的特征。在bash中将位置/opt/eigen/3.3追加或放在环境变量CMAKE_PREFIX_PATH的前面:
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH:/opt/eigen/3.3"那么CMake应该把它捡起来。
如果您正在编写使用Eigen的自己的CMakeLists.txt,我建议使用如下代码:
find_package (Eigen3 3.3 REQUIRED)
add_executable (example example.cpp)
target_link_libraries (example Eigen3::Eigen)您不应该使用include_directories,因为CMake 3已经发布--在可用的时候,目标方法应该是首选的。
发布于 2015-04-02 23:21:53
首先,确保艾根安装正确。请参阅tarball附带的INSTALL文件。
其次,将cmake/FindEigen3.cmake文件从tarball复制到包含CMakeLists.txt的目录。
在您的CMakeLists.txt中添加:
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})现在你应该可以做#include <Eigen/Core>了。
所有这些(大部分)都来自于这个来源。
与include_directories("$ENV{EIGEN3_INCLUDE_DIR}")相比,这种方法有一个优点,即它使用CMake的标准机制来查找外部依赖项,从而使其他人(或您未来的自己)更容易获得项目,可能是在另一个平台上。
(但是,如果Eigen本身安装了一个EigenConfig.cmake文件,使它可以通过find_package机制访问,而不需要任何额外的路径,那就太好了。)
https://stackoverflow.com/questions/12249140
复制相似问题