首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >体系结构- Xcode 13中的特定构建设置

体系结构- Xcode 13中的特定构建设置
EN

Stack Overflow用户
提问于 2022-02-05 16:32:49
回答 1查看 870关注 0票数 0

我试图在我的Xcode框架中使用特定于架构的构建设置,这样我就可以分别处理Apple和Intel的情况。我需要使用此构建设置作为金属中的宏来检查half数据类型是否在CPU上被支持(苹果硅支持它,但英特尔不支持它)。

我的当前实现使用了一个xcconfig文件,其行如下:

IS_X86_64[arch=x86_64] = 1

然后,在我的构建设置中,我有以下用户定义的条件(来自xcconfig):

然后,我创建了宏IS_INTEL,以便它可以用于金属:

问题是

从理论上讲,我觉得这应该是可行的。然而,在我的英特尔mac上运行我的金属应用程序,就能为IS_X86_64提供0。我做的第一件事是检查是否正确设置了构建设置并替换了

IS_X86_64[arch=x86_64] = 1IS_X86_64[arch=*] = 1

这起作用了,所以我知道问题必须是我当前的体系结构没有被正确地表示出来。深入探究为什么会发生这种情况,结果发现CURRENT_ARCH的值(它应该保存项目正在运行的当前设备体系结构的值)是undefined_arch

在他们的Xcode 10发行说明中,苹果提到了undefined_arch的一些说法:

在运行shell脚本构建阶段时,新的构建系统传递undefined_arch作为ARCH环境变量的值。该值以前没有很好地定义。依赖于此值的任何shell脚本都必须针对正在构建的所有已定义的体系结构(通过ARCHS环境变量提供)进行正确的行为。

但是,我没有在shell上构建我的项目,也没有任何shell脚本。有谁知道我怎样才能解决这个问题,这样特定于架构的构建设置就会像他们应该的那样运行吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-05 23:55:33

您可以通过内置宏检查体系结构。您可以看到它们如何在usr/include/TargetConditionals.h中使用。

代码语言:javascript
运行
复制
#if __is_target_arch(x86_64)
    ...
#endif

更多宏:

代码语言:javascript
运行
复制
__is_target_arch(arm64)
__is_target_arch(arm64e)
__is_target_os(ios)
__is_target_environment(macabi)
__is_target_environment(simulator)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70999932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档