Windows下使用MinGW编译OMPL(已安装Boost、Eigen)失败求助
Windows下使用MinGW编译OMPL(已安装Boost、Eigen)失败求助
针对你遇到的这些编译问题,我结合自己的实践经验和CMake相关规则,给你分点分析并提供具体解决办法:
一、先解决最致命的target_link_libraries错误
这个错误的核心原因是OMPL源码的src/ompl/CMakeLists.txt中,对ompl目标调用target_link_libraries时混用了关键字语法(比如带PRIVATE/PUBLIC前缀)和普通语法,违反了CMake的强制规则:同一个目标的所有target_link_libraries调用必须统一风格。
具体修复步骤:
- 打开OMPL源码目录下的
src/ompl/CMakeLists.txt文件 - 定位到第43行和第59行的
target_link_libraries调用:- 如果第43行是带关键字的写法(例如
target_link_libraries(ompl PUBLIC ...)),就把第59行的调用也改成带关键字的形式; - 如果第43行是普通写法(例如
target_link_libraries(ompl ...)),就把第59行也改成对应的普通写法。
- 如果第43行是带关键字的写法(例如
- 保存修改后,删除原build目录,重新执行CMake配置和编译操作。
二、CMP0144警告的处理
这个警告是CMake 3.24+引入的新策略(CMP0144)导致的,它要求find_package使用大写的<PACKAGENAME>_ROOT变量(比如BOOST_ROOT要改为boost_ROOT),但旧版本的CMake模块可能仍在使用小写变量名。
你可以二选一处理:
- 快速屏蔽警告:在你的CMake命令末尾添加
-Wno-dev参数,直接忽略开发者级别的警告,不影响编译流程:cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBOOST_ROOT="C:/mingw" -DEIGEN3_INCLUDE_DIR="C:/eigen-install" -DOMPL_BUILD_PYBINDINGS=OFF -Wno-dev - 彻底解决警告:在OMPL根目录的
CMakeLists.txt最开头添加一行配置,强制启用新策略:
这样CMake就会正常识别cmake_policy(SET CMP0144 NEW)BOOST_ROOT变量,不再弹出该警告。
三、distutils模块找不到的问题
虽然你已经关闭了Python绑定,但OMPL的CMake脚本可能仍会执行一些Python相关的隐性检查(比如尝试获取Python库路径)。解决办法有两种:
- 补装
distutils模块:如果你用的是官方Python安装包,重新运行安装程序并勾选完整组件;对于Python 3.10+版本,可以通过pip install setuptools来间接获取distutils(因为该模块已整合到setuptools中)。 - 强制CMake完全忽略Python:在原有CMake命令中添加以下参数,彻底禁用所有Python相关检测:
把这些参数追加到命令末尾,就能避免触发Python相关的脚本执行。-DPython_EXECUTABLE=NO -DPython_INCLUDE_DIR=NO -DPython_LIBRARY=NO
四、关于其他可选依赖的缺失提示
你输出里提到的PkgConfig、spot、Doxygen、yaml-cpp等找不到的提示,这些都是非必需的可选依赖,不会影响OMPL核心库的编译。如果你不需要对应的功能(比如生成文档、LTL自动机、特定Demo),可以完全忽略这些提示。
最后提醒:每次修改CMake配置或源码中的CMakeLists.txt后,一定要删除整个build目录再重新执行CMake配置,避免旧的缓存文件干扰新的配置流程。
内容来源于stack exchange
相关产品推荐
相关产品推荐

