查找CMake包Eigen3 [英] Find package Eigen3 for CMake
本文介绍了查找CMake包Eigen3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
CMake找不到我的 Eigen3 包。我设置了一个环境变量
CMake cannot find my Eigen3 package. I set an environment variable called
EIGEN3_INCLUDE_DIR
指向 FindEigen3.cmake
的路径。
CMakelists.txt我写道:
Then in the CMakelists.txt I wrote:
find_package( Eigen3 REQUIRED )
include_directories( EIGEN3_INCLUDE_DIR )
我收到下一个错误消息:
I get next message of error:
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)
关于我遗漏或做错了什么想法? / p>
Any idea on what I am missing or doing wrong?
推荐答案
由于Eigen3只是完全的头,所以你需要的是include目录的路径。而这一个,你已经手动定义。因此,没有真正需要一个 FindEigen3.cmake
或 FIND_PACKAGE
调用。
Since Eigen3 is completely header only, all you ever need is the path to the include directory. And this one, you are already defining manually anyway. So there is no real need for a FindEigen3.cmake
or FIND_PACKAGE
call.
只需使用
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_DIR
与FindEigen3.cmake
- 的位置完全无关,但可能是您的
- 或者,自建的基于CMake的项目经常会使用这个变量来确定您的Eigen3安装的位置。提供一个
< PackageName> Config.cmake
如果你指向一个名为< PackageName> _DIR
包含此文件,您可以照常使用FIND_PACKAGE(< PackageName> ...)
,请参阅 FIND_PACKAGE 的文档。
- If you want to access the content of a CMake variable, make sure to use
${...}
$ENV{....}
accesses environment variables.- The second example will stop with an error if the environment variable is not set (and, thus, EIGEN3_INCLUDE_DIR cmake variable is empty)
- Be careful to use quotation marks around (evaluated) variables if they could contain whitespace. Otherwise, CMake will interpret it as a list.
- If you want to use custom find modules, make sure to either place them in you CMake installation or, as @Fraser pointed out above, make sure to point
CMAKE_MODULE_PATH
to the directory where it is. Not sure, but it could be that CMake checks the current directory as well automatically (where yourCMakeLists.txt
resides. Anyhow, settingEIGEN3_INCLUDE_DIR
is totally unrelated to the location ofFindEigen3.cmake
- However, it could be that your
FindEigen3
script evaluates this variable to determine the location of your Eigen3 installation. - Alternatively, self-built CMake-based projects often provide a
<PackageName>Config.cmake
. If you point a variable called<PackageName>_DIR
to the directory containing this file, you can useFIND_PACKAGE( <PackageName> ...)
as normal. See documentation of FIND_PACKAGE for details.
这篇关于查找CMake包Eigen3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文