CMake -动态确定CPU架构

r7s23pms  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(210)

我正在编写一个需要ARM嵌入式工具链的CMake构建脚本。根据用户的OS和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芯片。
有办法解决吗?

nwlqm0z1

nwlqm0z11#

你关于CMAKE_SYSTEM_PROCESSOR是空的,因此是无用的说法令人惊讶。类似这样的东西应该可以工作:

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

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

5n0oy7gb

5n0oy7gb2#

Fabian的回答指出,我试图在调用project()之前读取CMAKE_SYSTEM_PROCESSOR的值,此时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)

相关问题