我正在开发一个需要 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_SYSTEM_PROCESSOR
是空的,因此无用的说法令人惊讶。像这样的东西应该有效:
if(APPLE)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
# Link to MacOSARM version
else()
# Link to MacOSX version
endif()
endif(APPLE)
也许更新您的 CMAKE 版本会有所帮助。
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)