You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下CMake构建Arduino项目时avr-as遇-isysroot选项报错求助

解决MacOS下CMake构建Arduino项目时avr-as无法识别-isysroot选项的问题

问题

在MacOS系统上使用CMake/make构建Arduino C++项目时,系统会自动向avr-as传递-isysroot选项,但avr-as不支持该选项,导致构建失败。

错误日志

avr-as  -I/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/libraries/EEPROM/src -I/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard -I/Users/david/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include -I/Users/david/C/arduino/avr-libstdcpp/include -isysroot /Applications/Xcode14.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk -o CMakeFiles/untitled.dir/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/wiring_pulse.S.o -c /Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/wiring_pulse.S
avr-as: unrecognized option `-isysroot'
make[2]: *** [CMakeFiles/untitled.dir/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/wiring_pulse.S.o] Error 1
make[1]: *** [CMakeFiles/untitled.dir/all] Error 2

当前CMakeLists.txt配置

cmake_minimum_required(VERSION 3.20)

set(HAVE_FLAG_SEARCH_PATHS_FIRST 0)

project(untitled)
project(untitled LANGUAGES C CXX ASM)

set(CMAKE_C_COMPILER avr-gcc)
set(CMAKE_CXX_COMPILER avr-g++)
set(CMAKE_ASM_COMPILER avr-as)

set(CMAKE_C_COMPILER_FORCED 1)
set(CMAKE_CXX_COMPILER_FORCED 1)

#set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

#sanitizers: address, thread, undefined, safe-stack
set(CMAKE_CXX_FLAGS "-DF_CPU=16000000 -D__AVR_ATmega16U2__=1 -DTX_RX_LED_INIT=0 -DRXLED0=0 -DTXLED0=1 -DRXLED1=5 -DTXLED1=6 -DLED01=13 -DUSB_VID=0x2341 -DUSB_PID=0x0036 -usb_product=32u416m -mmcu=atmega2560 -O2")
set(CMAKE_C_FLAGS "-DF_CPU=16000000 -D__AVR_ATmega16U2__=1 -DTX_RX_LED_INIT=0 -DRXLED0=0 -DTXLED0=1 -DRXLED1=5 -DTXLED1=6 -DLED01=13 -DUSB_VID=0x2341 -DUSB_PID=0x0036 -usb_product=32u416m -mmcu=atmega2560 -O2")
set(CMAKE_ASM_FLAGS "")

file(GLOB SOURCES "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/*.cpp" "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/*.c" "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/*.S" "main.cpp")

add_executable(untitled ${SOURCES})

# changes c++ standard from gnu++YEAR to c++YEAR
# seems to fix issues using bear and clangd
set_target_properties(untitled PROPERTIES CXX_EXTENSIONS OFF)

target_include_directories(untitled PUBLIC "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/libraries/EEPROM/src/")
target_include_directories(untitled PUBLIC "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/")
target_include_directories(untitled PUBLIC "/Users/david/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/variants/standard")
target_include_directories(untitled PUBLIC "/Users/david/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/")
target_include_directories(untitled PUBLIC "/Users/david/C/arduino/avr-libstdcpp/include")

解决方法

方法1:标记ASM编译器为强制交叉编译器并清空系统根目录

在CMakeLists.txt中添加以下配置,让CMake识别avr-as为交叉编译器,避免自动添加主机系统的-isysroot选项:

# 标记ASM编译器为强制使用,阻止CMake添加主机系统相关选项
set(CMAKE_ASM_COMPILER_FORCED 1)
# 清空MacOS系统根目录配置,避免自动传递-isysroot
set(CMAKE_OSX_SYSROOT "")

方法2:手动移除ASM_FLAGS中的-isysroot选项

如果方法1不生效,可直接从ASM编译选项中剔除-isysroot参数:

# 移除ASM编译选项中的-isysroot参数
string(REPLACE "-isysroot ${CMAKE_OSX_SYSROOT}" "" CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS}")

完整修改后的关键配置片段

补充上述配置后,CMakeLists.txt的编译器配置部分如下:

set(CMAKE_C_COMPILER avr-gcc)
set(CMAKE_CXX_COMPILER avr-g++)
set(CMAKE_ASM_COMPILER avr-as)

set(CMAKE_C_COMPILER_FORCED 1)
set(CMAKE_CXX_COMPILER_FORCED 1)
set(CMAKE_ASM_COMPILER_FORCED 1) # 新增
set(CMAKE_OSX_SYSROOT "") # 新增

# 其他原有配置...

说明

MacOS下的CMake默认会向所有编译器自动添加-isysroot选项,用于指定主机系统SDK路径,但avr-as作为AVR架构的专用汇编器,不支持该选项。通过标记ASM编译器为强制交叉编译器或清空系统根目录配置,可阻止CMake自动添加该无效选项。

内容的提问来源于stack exchange,提问作者David Carpenter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:32:27