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 的主机系统的系统信息。可以提供一个或多个 <key> 来选择要查询的信息。查询值的列表存储在 <variable> 中。

<key> 可以是以下值之一

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_64BIT

在 3.10 版本中添加。

如果处理器是 64 位,则为 1

HAS_FPU

在 3.10 版本中添加。

如果处理器具有浮点单元,则为 1

HAS_MMX

在 3.10 版本中添加。

如果处理器支持 MMX 指令,则为 1

HAS_MMX_PLUS

在 3.10 版本中添加。

如果处理器支持扩展 MMX 指令,则为 1

HAS_SSE

在 3.10 版本中添加。

如果处理器支持 SSE 指令,则为 1

HAS_SSE2

在 3.10 版本中添加。

如果处理器支持 SSE2 指令,则为 1

HAS_SSE_FP

在 3.10 版本中添加。

如果处理器支持 SSE FP 指令,则为 1

HAS_SSE_MMX

在 3.10 版本中添加。

如果处理器支持 SSE MMX 指令,则为 1

HAS_AMD_3DNOW

在 3.10 版本中添加。

如果处理器支持 3DNow 指令,则为 1

HAS_AMD_3DNOW_PLUS

在 3.10 版本中添加。

如果处理器支持 3DNow+ 指令,则为 1

HAS_IA64

在 3.10 版本中添加。

如果 IA64 处理器模拟 x86,则为 1

HAS_SERIAL_NUMBER

在 3.10 版本中添加。

如果处理器具有序列号,则为 1

PROCESSOR_SERIAL_NUMBER

在 3.10 版本中添加。

处理器序列号

PROCESSOR_NAME

在 3.10 版本中添加。

人类可读的处理器名称

PROCESSOR_DESCRIPTION

在 3.10 版本中添加。

人类可读的完整处理器描述

OS_NAME

在 3.10 版本中添加。

主机操作系统名称

  • 在 UNIX 平台上,这是 uname -s

  • 在 Apple 平台上,这是 sw_vers -productName

  • 在 Windows 上,这是 Windows

另请参见 CMAKE_HOST_SYSTEM_NAME

OS_RELEASE

在 3.10 版本中添加。

操作系统子类型,例如在 Windows 上为 Professional

OS_VERSION

在 3.10 版本中添加。

操作系统构建 ID

OS_PLATFORM

在 3.10 版本中添加。

请参阅 CMAKE_HOST_SYSTEM_PROCESSOR

MSYSTEM_PREFIX

在 3.28 版本中添加。

仅在 Windows 主机上可用。在设置了 MSYSTEM 环境变量的 MSYS 或 MinGW 开发环境中,这是其安装前缀。否则,这是空字符串。

DISTRIB_INFO

在 3.22 版本中添加。

读取 /etc/os-release 文件并将给定的 <variable> 定义为读取变量的列表

DISTRIB_<name>

在 3.22 版本中添加。

获取 <name> 变量(请参阅 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-<name>.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_<varname> 变量的名称存储在此列表中。

示例

# 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)

脚注

查询 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>])

对本地计算机注册表子项执行查询操作。返回位于注册表中指定子项下的子项或值名称列表,或指定值名称的数据。查询实体的结果存储在 <variable> 中。

注意

查询除 Windows 之外的任何其他平台(包括 CYGWIN)的注册表将始终返回空字符串,并在子选项 ERROR_VARIABLE 指定的变量中设置错误消息。

<key> 指定本地计算机上子项的完整路径。<key> 必须包含有效的根键。本地计算机的有效根键是

  • HKLMHKEY_LOCAL_MACHINE

  • HKCUHKEY_CURRENT_USER

  • HKCRHKEY_CLASSES_ROOT

  • HKUHKEY_USERS

  • HKCCHKEY_CURRENT_CONFIG

以及可选的,指定根键下的子项的路径。路径分隔符可以是斜杠或反斜杠。<key> 不区分大小写。例如

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

请求在 <key> 下定义的值名称列表。如果定义了默认值,它将用特殊名称 (default) 标识。

SUBKEYS

请求在 <key> 下定义的子键列表。

VALUE <name>

请求存储在名为 <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 位注册表。在 32bit Windows 上,始终返回空字符串。

32

查询 32 位注册表。

64_32

对于 VALUE 子选项或默认值,使用视图 64 查询注册表,如果请求失败,则使用视图 32 查询注册表。对于 VALUE_NAMESSUBKEYS 子选项,查询两个视图(6432)并合并结果(排序并删除重复项)。

32_64

对于 VALUE 子选项或默认值,使用视图 32 查询注册表,如果请求失败,则使用视图 64 查询注册表。对于 VALUE_NAMESSUBKEYS 子选项,查询两个视图(3264)并合并结果(排序并删除重复项)。

HOST

查询与主机架构匹配的注册表:在 64bit Windows 上为 64,在 32bit Windows 上为 32

TARGET

查询与 CMAKE_SIZEOF_VOID_P 变量指定的架构匹配的注册表。如果未定义,则回退到 HOST 视图。

BOTH

查询两个视图(3264)。顺序取决于以下规则:如果定义了 CMAKE_SIZEOF_VOID_P 变量。根据此变量的内容使用以下视图

  • 8: 64_32

  • 4: 32_64

如果未定义 CMAKE_SIZEOF_VOID_P 变量,则依赖于主机的架构

  • 64bit64_32

  • 32bit32

SEPARATOR

REG_MULTI_SZ 类型指定分隔符字符。如果未指定,则使用字符 \0

ERROR_VARIABLE <result>

返回查询操作期间引发的任何错误。如果成功,则该变量包含一个空字符串。