【问题标题】:What are the possible values of CMAKE_SYSTEM_PROCESSOR?CMAKE_SYSTEM_PROCESSOR 的可能值是多少?
【发布时间】:2022-01-25 05:58:19
【问题描述】:

在 CMake 中,CMAKE_SYSTEM_PROCESSOR 有哪些不同的可能值?至少 AMD、Intel、Apple、Qualcomm 等通用处理器系列的价值?

我在CMake documentation 中找不到此信息。

【问题讨论】:

    标签: cmake build processor buildconfiguration


    【解决方案1】:

    根据documentation,“不交叉编译时,此变量与CMAKE_HOST_SYSTEM_PROCESSOR 变量具有相同的值”。在前一种情况下,变量由工具链文件设置,我假设这是您感兴趣的。

    在后一种情况下,documentation 表示CMAKE_HOST_SYSTEM_PROCESSOR 是通过以下方式检查环境来确定的:

    • 在 Windows 上,使用 PROCESSOR_ARCHITECTURE 环境变量的值。
    • 在 macOS 上,默认使用 uname -m 的值。但是,由于这可能会根据您使用的是 x86 还是 ARM CMake 而有所不同,如果已设置,则版本 3.19.2+ 将使用 CMAKE_APPLE_SILICON_PROCESSOR(CMake 或环境变量)的值。它还将Power Macintosh 标准化为powerpc
      • 据我所知,此处可能的值为x86_64arm64powerpc
    • 在 OpenBSD 上,它使用 arch -s 命令。
      • 不确定此处的完整列表。不幸的是,man page 对此无话可说。
    • 在 Linux 和相关系统(Cygwin、MSYS、Android、GNU)上,它使用uname -m
    • 否则,它会查找uname 命令并首先尝试uname -p。如果它返回非零退出状态,它会求助于uname -m
      • 不知道这可能是什么。

    但真正重要的是 CMake 将如何使用CMAKE_SYSTEM_PROCESSOR 的值。以下是我知道的功能:

    • CPACK_SYSTEM_NAME 的默认值为${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}
    • 语言模块Modules/CMake<LANG>Information.cmake 都可选地包括以-${CMAKE_SYSTEM_PROCESSOR}.cmake 为后缀的平台模块
      • 在大多数情况下,不存在此类模块。在 Android 上,很多平台模块都带有特定于处理器的变体。
    • FindJNI 模块使用它来指导其搜索
    • 通过--mcpu(编译)和--cpu(链接)传递给ARMClang

    【讨论】:

    • Source: this SuperUser answer. 在源代码中非常清楚:gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/… -> $ENV{PROCESSOR_ARCHITECTURE} 在 Windows 上。
    • @KamilCuk - 这只是PROCESSOR_ARCHITECTURE的可能值的来源
    • 但是 - 这个值依赖于操作系统有什么意义呢?它应该只取决于实际的处理器架构。
    • @einpoklum - 这是 CMake 开发人员的问题。我也不明白为什么这些值也没有标准化。
    • @AlexReinking:好的,很公平,但是我们如何使用这些非标准化值呢?检查我们关心的每个处理器的所有变体? (我想这是一个反问。)
    猜你喜欢
    • 2021-08-06
    • 2018-03-12
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多