cmake_host_system_information¶
查询各种主机系统信息。
概要¶
Query host system specific information cmake_host_system_information(RESULT <variable> QUERY <key> ...) Query Windows registry cmake_host_system_information(RESULT <variable> QUERY WINDOWS_REGISTRY <key> ...)
查询主机系统特定信息¶
cmake_host_system_information(RESULT <variable> QUERY <key> ...)
查询 CMake 运行所在的主机系统的系统信息。可以提供一个或多个 `
`
NUMBER_OF_LOGICAL_CORES逻辑核心数
NUMBER_OF_PHYSICAL_CORES物理核心数
HOSTNAME主机名
FQDN完全限定域名
TOTAL_VIRTUAL_MEMORY总虚拟内存(以 MiB 为单位)[1]
AVAILABLE_VIRTUAL_MEMORY可用虚拟内存(以 MiB 为单位)[1]
TOTAL_PHYSICAL_MEMORY总物理内存(以 MiB 为单位)[1]
AVAILABLE_PHYSICAL_MEMORY可用物理内存(以 MiB 为单位)[1]
IS_64BIT3.10 版本新增。
如果处理器是 64 位,则为 1
HAS_FPU3.10 版本新增。
如果处理器有浮点单元,则为 1
HAS_MMX3.10 版本新增。
如果处理器支持 MMX 指令,则为 1
HAS_MMX_PLUS3.10 版本新增。
如果处理器支持扩展 MMX 指令,则为 1
HAS_SSE3.10 版本新增。
如果处理器支持 SSE 指令,则为 1
HAS_SSE23.10 版本新增。
如果处理器支持 SSE2 指令,则为 1
HAS_SSE_FP3.10 版本新增。
如果处理器支持 SSE FP 指令,则为 1
HAS_SSE_MMX3.10 版本新增。
如果处理器支持 SSE MMX 指令,则为 1
HAS_AMD_3DNOW3.10 版本新增。
如果处理器支持 3DNow 指令,则为 1
HAS_AMD_3DNOW_PLUS3.10 版本新增。
如果处理器支持 3DNow+ 指令,则为 1
HAS_IA643.10 版本新增。
如果 IA64 处理器正在模拟 x86,则为 1
HAS_SERIAL_NUMBER3.10 版本新增。
如果处理器有序列号,则为 1
PROCESSOR_SERIAL_NUMBER3.10 版本新增。
处理器序列号
PROCESSOR_NAME3.10 版本新增。
易于理解的处理器名称
PROCESSOR_DESCRIPTION3.10 版本新增。
易于理解的完整处理器描述
OS_NAME3.10 版本新增。
主机操作系统名称
在 UNIX 平台上,这是 `uname -s`。
在 Apple 平台上,这是 `sw_vers -productName`。
在 Windows 上,这是 `Windows`。
另请参阅
CMAKE_HOST_SYSTEM_NAME。OS_RELEASE3.10 版本新增。
操作系统子类型,例如在 Windows 上是 `Professional`
OS_VERSION3.10 版本新增。
操作系统版本号
OS_PLATFORM3.10 版本新增。
MSYSTEM_PREFIX版本 3.28 新增。
仅在 Windows 主机上可用。在设置了 `MSYSTEM` 环境变量的 MSYS 或 MinGW 开发环境中,这是其安装前缀。否则,此值为空字符串。
DISTRIB_INFO3.22 版本新增。
读取 `/etc/os-release` 文件并将读取的变量列表定义到 `
` 中 DISTRIB_<name>3.22 版本新增。
获取 `
` 变量(请参阅 man 5 os-release),如果它存在于 `/etc/os-release` 文件中 示例
cmake_host_system_information(RESULT PRETTY_NAME QUERY DISTRIB_PRETTY_NAME) message(STATUS "${PRETTY_NAME}") cmake_host_system_information(RESULT DISTRO QUERY DISTRIB_INFO) foreach(VAR IN LISTS DISTRO) message(STATUS "${VAR}=`${${VAR}}`") endforeach()
输出
-- Ubuntu 20.04.2 LTS -- DISTRO_BUG_REPORT_URL=`https://bugs.launchpad.net/ubuntu/` -- DISTRO_HOME_URL=`https://www.ubuntu.com/` -- DISTRO_ID=`ubuntu` -- DISTRO_ID_LIKE=`debian` -- DISTRO_NAME=`Ubuntu` -- DISTRO_PRETTY_NAME=`Ubuntu 20.04.2 LTS` -- DISTRO_PRIVACY_POLICY_URL=`https://www.ubuntu.com/legal/terms-and-policies/privacy-policy` -- DISTRO_SUPPORT_URL=`https://help.ubuntu.com/` -- DISTRO_UBUNTU_CODENAME=`focal` -- DISTRO_VERSION=`20.04.2 LTS (Focal Fossa)` -- DISTRO_VERSION_CODENAME=`focal` -- DISTRO_VERSION_ID=`20.04`
如果找不到 `/etc/os-release` 文件,该命令会尝试通过回退脚本收集操作系统标识。回退脚本可以使用 各种特定于发行版的文件 来收集操作系统标识数据,并将其映射到 man 5 os-release 变量。
回退接口变量¶
- CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS¶
除了 CMake 自带的脚本外,用户还可以将自己的脚本的完整路径追加到此列表中。脚本文件名格式如下:`NNN-
.cmake`,其中 `NNN` 是用于按特定顺序应用收集到的脚本的三位数字。
- CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>¶
用户提供的回退脚本收集的变量应使用此命名约定分配给 CMake 变量。例如,手册中的 `ID` 变量将成为 `CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID`。
- CMAKE_GET_OS_RELEASE_FALLBACK_RESULT¶
回退脚本应将所有已分配的 `CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_
` 变量的名称存储在此列表中。
示例
# 000-FallbackScript.cmake
#
# Try to detect some old distribution
# See also
# - http://linuxmafia.com/faq/Admin/release-files.html
#
if(NOT EXISTS "${CMAKE_SYSROOT}/etc/foobar-release")
return()
endif()
# Get the first string only
file(
STRINGS "${CMAKE_SYSROOT}/etc/foobar-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
LIMIT_COUNT 1
)
#
# Example:
#
# Foobar distribution release 1.2.3 (server)
#
if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "Foobar distribution release ([0-9\.]+) .*")
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Foobar)
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID foobar)
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
list(
APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
)
endif()
unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
然后,此脚本可以作为回退以确定缺失的主机系统信息
list(
APPEND
CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS
${CMAKE_CURRENT_SOURCE_DIR}/000-FallbackScript.cmake
)
cmake_host_system_information(RESULT info QUERY DISTRIB_INFO)
脚注
查询 Windows 注册表¶
在 3.24 版本中添加。
cmake_host_system_information(RESULT <variable>
QUERY WINDOWS_REGISTRY <key> [VALUE_NAMES|SUBKEYS|VALUE <name>]
[VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
[SEPARATOR <separator>]
[ERROR_VARIABLE <result>])
对本地计算机注册表子项执行查询操作。返回指定注册表子项下的子项或值名称列表,或者指定值名称的数据。查询实体的结果存储在 `
注意
在 Windows 以外的任何平台(包括 `CYGWIN`)上查询注册表,将始终返回空字符串,并在通过子选项 `ERROR_VARIABLE` 指定的变量中设置错误消息。
`
`HKLM` 或 `HKEY_LOCAL_MACHINE`
`HKCU` 或 `HKEY_CURRENT_USER`
`HKCR` 或 `HKEY_CLASSES_ROOT`
`HKU` 或 `HKEY_USERS`
`HKCC` 或 `HKEY_CURRENT_CONFIG`
并且,可以选择性地,指定根键下的子项路径。路径分隔符可以是斜杠或反斜杠。`
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM")
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware")
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKCU\\SOFTWARE\\Kitware")
VALUE_NAMES请求定义在 `
` 下的值名称列表。如果定义了默认值,它将以特殊名称 `(default)` 标识。 SUBKEYS请求定义在 `
` 下的子项列表。 VALUE <name>请求存储在名为 `
` 的值中的数据。如果未指定 `VALUE` 或参数是特殊名称 `(default)`,则返回默认值的内容(如果有)。 # query default value for HKLM/SOFTWARE/Kitware key cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware") # query default value for HKLM/SOFTWARE/Kitware key using special value name cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware" VALUE "(default)")
支持的类型有
REG_SZ.`REG_EXPAND_SZ`。返回的数据已展开。
`REG_MULTI_SZ`。返回的数据表示为 CMake 列表。另请参阅 `SEPARATOR` 子选项。
REG_DWORD.REG_QWORD.
对于所有其他类型,将返回空字符串。
VIEW指定必须查询的注册表视图。如果未指定,则使用 `BOTH` 视图。
64查询 64 位注册表。在 `32 位 Windows` 上,始终返回空字符串。
32查询 32 位注册表。
64_32对于 `VALUE` 子选项或默认值,使用视图 `64` 查询注册表,如果请求失败,则使用视图 `32` 查询注册表。对于 `VALUE_NAMES` 和 `SUBKEYS` 子选项,查询两个视图(`64` 和 `32`)并合并结果(排序并去除重复项)。
32_64对于 `VALUE` 子选项或默认值,使用视图 `32` 查询注册表,如果请求失败,则使用视图 `64` 查询注册表。对于 `VALUE_NAMES` 和 `SUBKEYS` 子选项,查询两个视图(`32` 和 `64`)并合并结果(排序并去除重复项)。
HOST查询与主机体系结构匹配的注册表:在 `64 位 Windows` 上为 `64`,在 `32 位 Windows` 上为 `32`。
TARGET查询与 `CMAKE_SIZEOF_VOID_P` 变量指定的体系结构匹配的注册表。如果未定义,则回退到 `HOST` 视图。
BOTH查询两个视图(`32` 和 `64`)。顺序取决于以下规则:如果 `CMAKE_SIZEOF_VOID_P` 变量已定义。根据此变量的内容使用以下视图
8:64_324:32_64
如果 `CMAKE_SIZEOF_VOID_P` 变量未定义,则依赖于主机的体系结构
`64bit`:`64_32`
`32bit`:`32`
SEPARATOR为 `REG_MULTI_SZ` 类型指定分隔符字符。如果未指定,则使用字符 `\0`。
ERROR_VARIABLE <result>返回查询操作期间引发的任何错误。成功时,变量为空字符串。