Git子模块Toppra依赖Eigen3作为子模块的CMake配置问题
解决方案
方法1:通过add_subdirectory让Eigen生成配置文件(推荐)
Eigen3的CMake支持在构建阶段自动生成Eigen3Config.cmake等配置文件,无需安装到系统。按以下步骤操作:
- 在主项目的
CMakeLists.txt中,先添加Eigen3子模块的构建:# 添加Eigen3子模块到构建流程 add_subdirectory(${PROJECT_SOURCE_DIR}/eigen) - 之后正常添加Toppra子模块:
借助add_subdirectory(toppra)add_subdirectory,Eigen的构建目录会被自动加入CMake的搜索路径,Toppra中的find_package(Eigen3 REQUIRED)就能找到生成的配置文件,无需额外设置路径变量。
方法2:直接指定Eigen头文件路径
如果不想让Eigen参与构建流程,可以直接给Toppra传递Eigen的头文件路径,绕过find_package逻辑:
- 在主项目
CMakeLists.txt中定义Eigen的头文件根目录:set(EIGEN_INCLUDE_ROOT "${PROJECT_SOURCE_DIR}/eigen") - 在添加Toppra子模块前,设置
Eigen3_INCLUDE_DIR变量(部分版本的Eigen查找逻辑会优先使用该变量):
或者直接修改Toppra的set(Eigen3_INCLUDE_DIR ${EIGEN_INCLUDE_ROOT}) add_subdirectory(toppra)cpp/CMakeLists.txt,将find_package(Eigen3 REQUIRED)替换为:# 根据你的目录结构调整相对路径 include_directories("${PROJECT_SOURCE_DIR}/../eigen")
失败原因解析
你之前的尝试无效,核心原因是:
- Eigen的源码目录中不存在
Eigen3Config.cmake或FindEigen3.cmake,前者是Eigen安装/构建时生成的配置文件,后者通常由系统CMake或安装后的Eigen提供; - 直接设置
Eigen3_DIR为源码目录,CMake无法找到所需的配置文件;添加CMAKE_MODULE_PATH也无意义,因为源码目录中没有对应的查找脚本。
内容的提问来源于stack exchange,提问作者maxpla3
相关产品推荐
相关产品推荐

