Windows 10下ROS Noetic执行catkin_make报Ninja与编译器缺失错误咨询
问题根因拆解
你遇到的两类CMake报错分别对应独立的配置缺失,具体原因如下:
Ninja构建工具识别失败的诱因
- 当前终端会话的环境变量PATH中,未包含
ninja.exe所在的目录路径。哪怕你在cmake命令中显式指定了-G Ninja生成器,CMake也只会在当前会话的可执行文件搜索路径中查找Ninja程序,匹配不到结果时就会直接提示CMAKE_MAKE_PROGRAM未配置。这个逻辑和是否打开VS命令提示符无关——VS命令提示符默认只会注入MSVC编译器的环境路径,不会自动附带Ninja的路径。 - 系统层面未安装Ninja构建工具。ROS Noetic的Windows安装流程中,Ninja是独立的依赖组件,不会随Visual Studio、也不会随ROS本体自动部署到系统可执行路径中。
C/C++编译器识别失败的诱因
- 调用的VS2017命令提示符没有正确加载MSVC编译器的可用环境。如果VS安装时没有勾选「使用C的桌面开发」工作负载,或是打开的不是适配x64架构的VS2017开发命令提示符,
cl.exe编译器路径、对应C/C头文件/库文件的路径就不会写入当前终端的环境变量,CMake执行语言能力探测时找不到可用的编译器,最终就会报CMAKE_C_COMPILER、CMAKE_CXX_COMPILER未设置的错误。 - 终端会话的环境变量隔离问题。终端的环境变量是在进程启动时一次性加载的,不会动态同步系统层面的配置变更。如果你是在之前启动的普通命令提示符中运行了roscore,后续直接在这个窗口里执行cmake命令,那么这个终端从启动时刻起就没有注入VS编译器的相关环境配置,哪怕后续在系统层面完成了VS安装,这个旧终端也感知不到配置变更,必然触发编译器找不到的报错。
通用配置干扰的诱因
- build目录残留的旧CMake缓存干扰配置。如果
G:\ros_ws\build路径下存在之前CMake运行生成的CMakeCache.txt文件,里面记录了历史运行时探测到的错误的构建工具路径、编译器路径,哪怕你后续修正了所有环境配置,CMake读取到旧缓存后仍会沿用错误值,触发和当前报错完全一致的提示。
内容的提问来源于stack exchange,提问作者azad.wolf
相关产品推荐
相关产品推荐

