CMake - 动态确定CPU架构

问题描述 投票:0回答:2

我正在开发一个需要 ARM 嵌入式工具链的 CMake 构建脚本。根据用户的操作系统和CPU架构,需要下载不同版本的工具包。当仅区分操作系统时,这很好,因为我可以执行以下操作:

if(WIN32)
    # link to Windows version
elseif(APPLE)
    # link to Apple version
elseif(LINUX)
    # link to Linux version

但是,Apple Silicon 的工具包与 Intel MacBook 不同,

CMAKE_SYSTEM_PROCESSOR
和其他类似变量看起来都是空的,因此没有任何用处,因此我无法区分 Apple Silicon 和 Intel 芯片。
有办法解决这个问题吗?

cmake makefile gnu apple-silicon arm-none-eabi-gcc
2个回答
0
投票

您关于

CMAKE_SYSTEM_PROCESSOR
是空的,因此无用的说法令人惊讶。像这样的东西应该有效:

if(APPLE)
  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
   # Link to MacOSARM version
  else()
   # Link to MacOSX version
  endif()
endif(APPLE)

也许更新您的 CMAKE 版本会有所帮助。


0
投票

Fabian 的回答指出,我试图在调用

CMAKE_SYSTEM_PROCESSOR
之前读取
project()
的值,此时
CMake
将确定几个属性。
所以,我写了以下函数:

function(host_uname_machine var)
    execute_process(COMMAND uname -m
        OUTPUT_STRIP_TRAILING_WHITESPACE
        OUTPUT_VARIABLE ${var})
    set(${var} ${${var}} PARENT_SCOPE)
endfunction()

该函数利用

uname
命令,可以按如下方式使用:

if(APPLE)
     host_uname_machine(machine)
     if(machine STREQUAL "x86_64")
          # download x86_64 toolchain
     elseif(machine STREQUAL "arm64")
          # download arm64 toolchain (Apple Silicon)
© www.soinside.com 2019 - 2024. All rights reserved.