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)

对我缺少或做错的事情有任何想法吗

最佳答案

由于Eigen3完全是仅 header ,因此您所需要的只是include目录的路径。而且,无论如何,您已经在手动定义。因此,真正不需要FindEigen3.cmakeFIND_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}" )

一些注意事项:
  • 如果要访问CMake变量的内容,请确保使用${...}
  • $ENV{....}访问环境变量。
  • 如果未设置环境变量(因此EIGEN3_INCLUDE_DIR cmake变量为空),则第二个示例将因错误而停止。
  • 如果变量(包含变量)可能包含空格,请小心使用引号。否则,CMake会将其解释为列表。
  • 如果要使用自定义查找模块,请确保将它们放在CMake安装中,或者如上面@Fraser所指出的那样,确保将CMAKE_MODULE_PATH指向它所在的目录。不确定,但是可能是CMake也会自动检查当前目录(您的CMakeLists.txt所在的位置。无论如何,设置EIGEN3_INCLUDE_DIRFindEigen3.cmake的位置完全无关
  • 但是,您的FindEigen3脚本可能会评估此变量以确定Eigen3安装的位置。
  • 另外,基于CMake的自建项目通常提供<PackageName>Config.cmake。如果将名为<PackageName>_DIR的变量指向包含此文件的目录,则可以正常使用FIND_PACKAGE( <PackageName> ...)。有关详细信息,请参见documentation of FIND_PACKAGE
  • 10-07 19:22
    查看更多