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

如何通过编译器可靠判断当前CMake使用的是AVR编译器?

优雅检测AVR编译目标的CMake方法

方法一:通过编译器目标三元组检测(最可靠)

AVR交叉编译器的目标架构固定为avr,通过让编译器输出目标信息判断,不受编译器文件名、路径或平台后缀影响,是最可靠的方案:

# 检测是否为AVR编译器
if(CMAKE_C_COMPILER)
    execute_process(
        COMMAND ${CMAKE_C_COMPILER} -dumpmachine
        OUTPUT_VARIABLE COMPILER_TARGET
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    string(FIND "${COMPILER_TARGET}" "avr" AVR_TARGET_FOUND)
    if(AVR_TARGET_FOUND GREATER_EQUAL 0)
        set(IS_AVR ON CACHE BOOL "Targeting AVR architecture")
    else()
        set(IS_AVR OFF CACHE BOOL "Not targeting AVR architecture")
    endif()
endif()

方法二:通过编译器名称检测(简单直接)

如果不想执行外部命令,可以直接检查编译器的文件名(自动处理Windows下的.exe后缀),适合常规使用场景:

# 通过编译器名称检测AVR
if(CMAKE_C_COMPILER)
    get_filename_component(COMPILER_NAME "${CMAKE_C_COMPILER}" NAME_WE)
    if(COMPILER_NAME STREQUAL "avr-gcc")
        set(IS_AVR ON CACHE BOOL "Targeting AVR architecture")
    else()
        set(IS_AVR OFF CACHE BOOL "Not targeting AVR architecture")
    endif()
endif()

统一使用IS_AVR变量

设置好IS_AVR后,即可在CMake脚本中统一用该变量做条件判断,适配不同编译环境:

if(IS_AVR)
    add_compile_options(--arduino-avr-specific-option)
    # 添加其他AVR专属配置:链接选项、头文件包含路径等
endif()

内容的提问来源于stack exchange,提问作者Tomáš Zato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:39:59