Windows系统Eclipse环境下编译Raspberry Pico代码失败求助
在Windows 10的Eclipse中搭建Raspberry Pico开发环境,软件安装过程顺利,但编译blink示例时出现大量错误。错误信息显示CMake错误选用了C:/Programs/MinGW/bin/gcc.exe,该编译器无法编译测试程序;系统中存在多个make.exe和gcc.exe,即使在Eclipse项目设置中指定了自定义make.exe,仍会选择错误的工具。
错误日志
15:19:01 **** 项目pico blinky的Default配置增量构建 **** "C:\Programs\GnuMake\make" all PICO_SDK_PATH 为 C:/Programs/Pico/pico-sdk PICO 平台为 rp2040。 -- C编译器标识为 GNU 11.3.1 -- CXX编译器标识为 GNU 11.3.1 -- ASM编译器标识为 GNU -- 找到汇编器: C:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/bin/arm-none-eabi-gcc.exe -- Eclipse版本设置为3.6 (Helios)。如果不正确请调整CMAKE_ECLIPSE_VERSION。 构建类型为 Debug 使用常规优化调试构建(设置PICO_DEOPTIMIZED_DEBUG=1可关闭优化) PICO目标板为 pico。 使用来自C:/Programs/Pico/pico-sdk/src/boards/include/boards/pico.h的板卡配置 -- 找到Python3: C:/Program Files/Python310/python.exe(找到版本 "3.10.6"),找到组件: Interpreter TinyUSB位于C:/Programs/Pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040;启用USB构建支持。 编译TinyUSB时使用CFG_TUSB_DEBUG=1 cyw43-driver位于C:/Programs/Pico/pico-sdk/lib/cyw43-driver lwIP位于C:/Programs/Pico/pico-sdk/lib/lwip -- 配置完成 -- 生成完成 -- 构建文件已写入: C:/Programs/Pico/pico-examples-eclipse 扫描目标ELF2UF2Build的依赖项 [ 0%] 执行'ELF2UF2Build'的配置步骤 -- C编译器标识为 GNU 6.3.0 -- CXX编译器标识为 GNU 6.3.0 -- Eclipse版本设置为3.6 (Helios)。如果不正确请调整CMAKE_ECLIPSE_VERSION。 -- 检测C编译器ABI信息 -- 检测C编译器ABI信息 - 失败 -- 检查可用的C编译器: C:/Programs/MinGW/bin/gcc.exe -- 检查可用的C编译器: C:/Programs/MinGW/bin/gcc.exe - 损坏 CMake错误位于C:/Program Files/CMake/share/cmake-3.19/Modules/CMakeTestCCompiler.cmake:66 (message): C编译器 "C:/Programs/MinGW/bin/gcc.exe" 无法编译简单测试程序。 失败输出如下: 切换目录: C:/Programs/Pico/pico-examples-eclipse/elf2uf2/CMakeFiles/CMakeTmp -- 配置未完成,发生错误! 另见 "C:/Programs/Pico/pico-examples-eclipse/elf2uf2/CMakeFiles/CMakeOutput.log"。 执行构建命令(s):C:/PROGRA~2/EMBARC~1/Studio/16.0/bin/make.exe cmTC_62d89/fast && MAKE Version 5.41 Copyright (c) 1987, 2014 Embarcadero Technologies, Inc. 另见 "C:/Programs/Pico/pico-examples-eclipse/elf2uf2/CMakeFiles/CMakeError.log"。 Error makefile 11: Colon expected *** make过程中发生1个错误 *** CMake将无法正确生成此项目。 调用栈(最近的调用优先): CMakeLists.txt:2 (project) make[2]: *** [blink/CMakeFiles/ELF2UF2Build.dir/build.make:125: blink/elf2uf2/src/ELF2UF2Build-stamp/ELF2UF2Build-configure] 错误 1 make[1]: *** [CMakeFiles/Makefile2:5121: blink/CMakeFiles/ELF2UF2Build.dir/all] 错误 2 make: *** [makefile:91: all] 错误 2 "C:/Programs/GnuMake/make all" 以退出码2终止。构建可能不完整。 15:19:30 构建失败。3个错误,0个警告。(耗时28s.721ms)
解决方法
调整系统环境变量优先级
把Arm GNU Toolchain的arm-none-eabi-gcc.exe所在路径(C:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/bin)和你指定的GnuMake路径(C:/Programs/GnuMake)移到系统环境变量PATH的最顶端,确保CMake优先找到正确的工具,而不是MinGW或Embarcadero的版本。在CMake中强制指定编译器与Make工具
在Eclipse的项目属性中打开CMake配置,添加以下参数,强制指定交叉编译工具链和Make程序:-DCMAKE_C_COMPILER="C:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/bin/arm-none-eabi-gcc.exe" -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/11.3 rel1/bin/arm-none-eabi-g++.exe" -DCMAKE_MAKE_PROGRAM="C:/Programs/GnuMake/make.exe"添加完成后重新生成CMake缓存,再执行构建。
清理旧缓存并重新构建
删除项目目录下的CMakeCache.txt文件和编译输出文件夹(如build),然后在Eclipse中执行"Clean"操作,之后重新触发构建,确保CMake重新检测并使用正确的工具链。单独配置ELF2UF2的Make工具
错误显示ELF2UF2构建时调用了Embarcadero的make.exe,可以在项目的CMakeLists.txt中添加以下代码,强制为ELF2UF2目标指定正确的Make工具:set(CMAKE_MAKE_PROGRAM "C:/Programs/GnuMake/make.exe" CACHE PATH "GNU Make path" FORCE)
内容的提问来源于stack exchange,提问作者Hneel

