CMake无法找到我的Eigen3包.我设置了一个名为的环境变量
EIGEN3_INCLUDE_DIR
Run Code Online (Sandbox Code Playgroud)
指向路径在哪里FindEigen3.cmake.
然后在CMakelists.txt我写道:
find_package( Eigen3 REQUIRED )
include_directories( EIGEN3_INCLUDE_DIR )
Run Code Online (Sandbox Code Playgroud)
我得到下一条错误消息:
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)
Run Code Online (Sandbox Code Playgroud)
关于我遗失或做错的任何想法?
Joh*_* S. 29
由于Eigen3仅是完全标头,因此您只需要包含目录的路径.而这一个,你已经手动定义了.所以没有真正的需要FindEigen3.cmake或FIND_PACKAGE呼叫.
简单地使用
INCLUDE_DIRECTORIES ( "$ENV{EIGEN3_INCLUDE_DIR}" )
Run Code Online (Sandbox Code Playgroud)
要么
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}" )
Run Code Online (Sandbox Code Playgroud)
几点说明:
${...}$ENV{....} 访问环境变量.CMAKE_MODULE_PATH它所在的目录.不确定,但可能是CMake自动检查当前目录(你CMakeLists.txt居住的地方.无论如何,设置EIGEN3_INCLUDE_DIR完全与位置无关)FindEigen3.cmakeFindEigen3脚本可能会评估此变量以确定Eigen3安装的位置.<PackageName>Config.cmake.如果将调用的变量指向<PackageName>_DIR包含此文件的目录,则可以FIND_PACKAGE( <PackageName> ...)正常使用.有关详细信息,请参阅FIND_PACKAGE文档.Emi*_*mil 10
首先,确保正确安装Eigen.请参阅INSTALLtarball附带的文件.
其次,将cmake/FindEigen3.cmake文件从tarball 复制到包含你的目录CMakeLists.txt.
在你的CMakeLists.txt添加中:
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
现在你应该可以做到,例如#include <Eigen/Core>.
所有这些(主要)来自这个来源.
这种方法的优势include_directories("$ENV{EIGEN3_INCLUDE_DIR}")在于,它使用CMake的标准机制来查找外部依赖关系,使其他人(或您未来的自己)更容易接收项目,可能在另一个平台上.
(但是,如果Eigen本身安装了一个EigenConfig.cmake文件,可以通过该find_package机制访问它而不需要任何额外的路径.)
Eigen> = 3.3具有直接的CMake集成,因此看来您的设置不正确。
假设已将Eigen安装为/opt/eigen/3.3具有默认设置。将位置附加或附加/opt/eigen/3.3到环境变量,CMAKE_PREFIX_PATH例如bash中:
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH:/opt/eigen/3.3"
Run Code Online (Sandbox Code Playgroud)
然后CMake应该拿起它。
如果您正在编写使用Eigen的自己的CMakeLists.txt,我建议使用如下代码:
find_package (Eigen3 3.3 REQUIRED)
add_executable (example example.cpp)
target_link_libraries (example Eigen3::Eigen)
Run Code Online (Sandbox Code Playgroud)
自CMake 3发布以来,您就不应该使用它include_directories-目标方法应尽可能地首选。
| 归档时间: |
|
| 查看次数: |
63852 次 |
| 最近记录: |