Xcode 14 beta运行CMake无法识别C/C++编译器问题咨询
问题触发原因
该问题是Xcode 14签名规则变更与旧版本CMake的适配冲突导致的:
- Xcode 13及更早版本中,
Command-line Tool(命令行工具)类型的构建目标默认允许空签名,无需配置开发者身份即可完成编译 - Xcode 14 beta版本开始调整了默认校验逻辑,所有命令行工具类型目标强制要求配置有效签名身份,空签名会直接抛出构建错误
CMake在执行编译器检测环节时,会自动生成CompilerIdC、CompilerIdCxx两个临时命令行工具目标,用来验证本地C/C++编译器是否可用。旧版本CMake生成这两个临时目标时没有配置任何签名相关参数,刚好触发Xcode 14的新校验规则,导致编译器检测流程失败,最终对外抛出「找不到CMAKE_C_COMPILER/CMAKE_CXX_COMPILER」的报错,错误日志里提到的空身份签名失败就是直接根因。
可行修复方案
按优先级从高到低排列:
- 升级CMake到3.24及以上版本
CMake官方在3.24版本已经完成Xcode 14的适配,生成Xcode项目时会自动给临时编译器检测目标配置跳过签名的参数,直接执行原命令cmake -G Xcode ..即可正常生成项目,不需要额外加参数,是长期最优方案。 - 执行cmake命令时手动追加签名配置参数
如果暂时无法升级CMake,可以在生成项目时追加参数,临时关闭签名校验:
该配置会对生成的Xcode项目全局生效,除了解决编译器检测阶段的报错,后续项目内不需要上架签名的命令行工具目标也可以正常编译。cmake -G Xcode .. \ -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="" \ -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO \ -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO - 配置Xcode全局默认签名(不推荐)
在Xcode设置-Locations页面中,给Command Line Tools选择本地已有的有效签名身份,该方案会修改Xcode全局构建配置,可能对其他项目的构建逻辑产生非预期影响,仅作为临时应急方案使用。
内容的提问来源于stack exchange,提问作者Bill Hollings
相关产品推荐
相关产品推荐

