Windows下CMake编译Ceres时find_package无法识别Eigen路径问题
问题解答
1. find_package指定路径的正确方式
不建议修改第三方库(ceres-solver)的CMakeLists.txt,容易引发后续版本同步冲突,优先选择以下两种无侵入方式:
- CMake-gui操作:第一次Configure报错后,直接在gui的变量列表中手动填写对应包的_DIR变量即可,无需修改系统环境变量
- 命令行操作:执行cmake命令时添加参数
-DEigen3_DIR=你的目标路径
如果确实需要全局生效,也可以配置Windows系统环境变量,但会影响所有cmake项目的包查找逻辑,不推荐。
2. Windows下路径配置规则
你之前指定的路径有误:
- 必须指向
Eigen3Config.cmake所在的精确目录,对应你本地的路径为E:/Code/libs/eigen-3.3.9/cmake,而非eigen的根目录 - 路径格式方面:CMake在Windows下同时支持正斜杠和反斜杠,若使用反斜杠写在CMakeLists字符串中需要转义为
\\,更推荐使用正斜杠避免转义问题;路径不含空格时引号可加可不加,含空格必须加引号。
3. find_package的搜索规则
find_package的Config模式(当前查找Eigen3使用的模式)不会递归搜索子目录,必须直接指向存放xxxConfig.cmake配置文件的精确目录,只会在该层级直接查找对应配置文件。
快速解决步骤
- 打开CMake-gui,选中ceres-solver的源码目录和构建目录,点击顶部菜单
File -> Delete Cache清空历史缓存 - 第一次点击
Configure,选择对应Visual Studio版本和目标平台,等待报错 - 在变量列表中找到
Eigen3_DIR条目,将值修改为E:/Code/libs/eigen-3.3.9/cmake - 再次点击
Configure即可解决Eigen找不到的问题,后续正常执行Generate生成VS工程即可
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

