Lubuntu20.04下CMake无法找到家目录自定义安装的Eigen3.4.0怎么办
解决方案
方法1:调用CMake时直接指定Eigen3配置目录
直接给CMake传入你本地Eigen 3.4.0的配置文件路径,优先级高于系统全局搜索路径,是最稳妥的方案:
cmake .. -DEigen3_DIR=$HOME/Libs/eigen-3.4.0/share/eigen3/cmake
方法2:传入CMAKE_PREFIX_PATH参数
如果需要同时指定多个本地自定义库的搜索前缀,可以用这个方法,CMake会自动在对应前缀路径下查找依赖配置:
cmake .. -DCMAKE_PREFIX_PATH=$HOME/Libs/eigen-3.4.0
方法3:手动指定头文件路径(兜底方案)
如果你下载的Eigen源码包没有预生成Eigen3Config.cmake配置文件,可以修改CMakeLists.txt跳过find_package的自动搜索,直接指定路径并手动做版本校验:
替换你原有的两行配置:
find_package(Eigen3 3.4.0 REQUIRED)
include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR})
为以下内容:
# 手动指定本地Eigen路径 set(EIGEN3_INCLUDE_DIR $ENV{HOME}/Libs/eigen-3.4.0) include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR}) # 校验路径合法性 if(NOT EXISTS ${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h) message(FATAL_ERROR "未在指定路径找到Eigen3头文件") endif() # 手动校验版本 file(READ ${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h EIGEN_MACROS_CONTENT) string(REGEX MATCH "#define EIGEN_WORLD_VERSION ([0-9]+)" _ ${EIGEN_MACROS_CONTENT}) set(EIGEN_WORLD_VER ${CMAKE_MATCH_1}) string(REGEX MATCH "#define EIGEN_MAJOR_VERSION ([0-9]+)" _ ${EIGEN_MACROS_CONTENT}) set(EIGEN_MAJOR_VER ${CMAKE_MATCH_1}) string(REGEX MATCH "#define EIGEN_MINOR_VERSION ([0-9]+)" _ ${EIGEN_MACROS_CONTENT}) set(EIGEN_MINOR_VER ${CMAKE_MATCH_1}) set(EIGEN3_FULL_VER ${EIGEN_WORLD_VER}.${EIGEN_MAJOR_VER}.${EIGEN_MINOR_VER}) if(NOT EIGEN3_FULL_VER VERSION_GREATER_EQUAL "3.4.0") message(FATAL_ERROR "Eigen版本过低:当前为${EIGEN3_FULL_VER},需要>=3.4.0") endif()
注意事项
- 每次修改CMake参数前必须删除build目录下的全部缓存文件,旧缓存会优先生效导致新参数不被识别。
- 如果你使用IDE(Clion、VSCode等)开发,需要在IDE的CMake配置项中添加对应参数,否则IDE默认调用CMake时不会携带自定义配置。
内容的提问来源于stack exchange,提问作者Svalorzen
相关产品推荐
相关产品推荐

