【问题标题】:C++/C Code to have different execution block on M1 and IntelC++/C 代码在 M1 和 Intel 上有不同的执行块
【发布时间】:2021-05-21 04:32:18
【问题描述】:

我正在为 macOS 应用程序编写代码。 该应用程序将在基于 M1 的 Mac 以及基于 Intel 的 Mac 上运行。 区分 M1 和英特尔的开关是什么?

if (M1)
{
   do something for M1
}
else if (Intel)
{
   do something for Intel
}

【问题讨论】:

    标签: c++ apple-m1


    【解决方案1】:

    我想,你can use__arm__来检测arm架构:

    #ifdef __arm__
    //do smth on arm (M1)
    #else
    //do smth on x86 (Intel)
    #endif
    

    【讨论】:

    • 请注意 OP,我怀疑他们的错误印象是他们将能够在代码中执行此操作使用单个构建:你不能.上述解决方案将构建两个不同的版本,依赖并基于使用的工具链、构建时选择的目标平台以及其中提供的预定义宏。结果是两个不同的构建;一个用于 M1,一个用于任何非武装,将上述相同分配给适当的目标是 OP 的责任。
    • 当你归档一个应用程序时,Xcode 会创建一个胖应用程序或库(一个执行器有两个平台的代码)。如果您只是构建(使用运行按钮),您将只获得一个平台的应用程序(不是所有平台)。
    • 要检测处理器名称,您可以使用 "hw.cputype", stackoverflow.com/questions/19859388/… 。但是,我认为,您还需要为您的应用程序检测仿真模式:developer.apple.com/forums/thread/652667
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多