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

CMake 3.30下Xcode生成器使用$(ARCHS_STANDARD)失效求助

CMake 3.30中$(ARCHS_STANDARD)设置CMAKE_OSX_ARCHITECTURES失效的问题分析

问题本质

你的写法并非CMake的标准用法,只是之前版本的CMake未做严格校验才得以正常工作,CMake 3.30新增的架构一致性检查暴露了这个潜在问题。

原因解析

$(ARCHS_STANDARD)是Xcode自身的构建变量,而非CMake原生支持的变量。在CMake 3.29.6及更早版本中,CMake会直接将这个字符串传递给Xcode项目,由Xcode在构建阶段解析该变量并生成对应架构的二进制。但CMake 3.30引入了更早的架构一致性校验——在生成Xcode项目的配置阶段,就会检查CMAKE_OSX_ARCHITECTURES的值是否对应编译器支持的有效架构。此时$(ARCHS_STANDARD)还只是未解析的字符串,无法匹配编译器实际支持的x86_64;arm64,因此触发报错。

解决方案

方案1:显式指定架构(推荐)

直接设置具体的目标架构,完全绕开Xcode变量的依赖,这是最稳定的方式:

if(CMAKE_GENERATOR STREQUAL "Xcode")
   set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "") 
endif()

方案2:通过Xcode属性传递变量

如果希望保留使用Xcode的ARCHS_STANDARD逻辑(比如适配不同Xcode版本的默认架构),可以通过设置Xcode的原生属性来传递,避免CMake的配置阶段校验:

  • 全局设置(针对所有目标):
if(CMAKE_GENERATOR STREQUAL "Xcode")
   set(CMAKE_XCODE_ATTRIBUTE_ARCHS "$(ARCHS_STANDARD)")
endif()
  • 针对单个目标设置:
set_target_properties(your_target_name PROPERTIES
    XCODE_ATTRIBUTE_ARCHS "$(ARCHS_STANDARD)"
)

这种方式下,CMake不会在配置阶段解析$(ARCHS_STANDARD),而是直接将其写入Xcode项目的build setting中,由Xcode在构建阶段处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:24