为什么CMAKE_SYSTEM_MAKSOR变量上的这个区分大小写的CMake条件会失败?

oyxsuwqo  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(142)

我试图构建一个我在GitHub上找到的项目,它失败了,因为显然CMake没有检测到支持的架构:

cmake_minimum_required(3.1)
project(myproject LANGUAGES CXX C)

# Architecture string.
set(ARCH "${CMAKE_SYSTEM_PROCESSOR}" CACHE STRING "Override CPU architecture")
string(REGEX REPLACE "amd64" "x86_64" KERNEL_ARCH "${ARCH}")

if("${KERNEL_ARCH}" STREQUAL "x86_64")
  set(ARCH "x64")
else()
  message(FATAL_ERROR "Unsupported ARCH: ${KERNEL_ARCH}")
endif()

字符串
这总是失败,并返回错误:
不支持的磁盘:AMD 64
我用的是Windows,我的架构是x86_64。我有一个英特尔i7。

o8x7eapl

o8x7eapl1#

可能是因为项目没有考虑到不同大小写的可能性。他们的正则表达式string(REGEX REPLACE)amd64,这与您的AMD64不匹配。
参见CMAKE_SYSTEM_PROCESSOR的文档:
当不进行交叉编译时,此变量与CMAKE_HOST_SYSTEM_PROCESSOR变量具有相同的值。
以及Windows平台上CMAKE_HOST_SYSTEM_PROCESSOR的文档,其中指出:
在Windows上,此变量设置为环境变量PROCESSOR_ARCHITECTURE的值。
对我来说更奇怪(因为我不熟悉这个环境变量或您遇到问题的项目),https://superuser.com/q/305901/1749748的(指的是https://learn.microsoft.com/en-ca/windows/win32/winprog64/wow64-implementation-details)并没有将Linux版本作为环境变量的可能值列出。也许Linux版本对于其他平台是正常的(比如Unix的(见相关的CMake文档)),项目维护者从未在Windows平台上测试过。我建议你向他们提出问题,让他们处理这个问题。

相关问题