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

物理核心数

主机名

主机名

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 位

HAS_FPU

在 3.10 版本加入.

一个如果处理器有浮点单元

有_MMX

在 3.10 版本加入.

一个如果处理器支持 MMX 指令

HAS_MMX_PLUS

在 3.10 版本加入.

如果处理器支持 Ext。 MMX指令

HAS_SSE

在 3.10 版本加入.

一个如果处理器支持 SSE 指令

HAS_SSE2

在 3.10 版本加入.

一个如果处理器支持 SSE2 指令

HAS_SSE_FP

在 3.10 版本加入.

一个如果处理器支持 SSE FP 指令

HAS_SSE_MMX

在 3.10 版本加入.

一个如果处理器支持 SSE MMX 指令

HAS_AMD_3DNOW

在 3.10 版本加入.

一个如果处理器支持 3DNow 指令

HAS_AMD_3DNOW_PLUS

在 3.10 版本加入.

一个如果处理器支持 3DNow+ 指令

HAS_IA64

在 3.10 版本加入.

一个是 IA64 处理器模拟 x86

HAS_SERIAL_NUMBER

在 3.10 版本加入.

一个,如果处理器有序列号

PROCESSOR_SERIAL_NUMBER

在 3.10 版本加入.

处理器序列号

PROCESSOR_NAME

在 3.10 版本加入.

人类可读的处理器名称

PROCESSOR_DESCRIPTION

在 3.10 版本加入.

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

OS_NAME

在 3.10 版本加入.

请参阅 CMAKE_HOST_SYSTEM_NAME

OS_RELEASE

在 3.10 版本加入.

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

OS_VERSION

在 3.10 版本加入.

操作系统构建 ID

OS_PLATFORM

在 3.10 版本加入.

请参阅 CMAKE_HOST_SYSTEM_PROCESSOR

DISTRIB_INFO

在 3.22 版本加入.

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

DISTRIB_<名称>

在 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`

如果未找到:file:/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)”来标识。

子键

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

<名称>

请求存储在名为“<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

对于所有其他类型,返回一个空字符串。

查看

指定必须查询哪些注册表视图。如果未指定,则使用 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”)并合并结果(排序并删除重复项)。

主机

查询与主机架构匹配的注册表:64 Windows 上的 6432 Windows 上的 32

目标

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

两者

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

  • 864_32

  • 432_64

如果未定义 CMAKE_SIZEOF_VOID_P 变量,则取决于主机的体系结构:

  • 64位64_32

  • 32位32

分隔符

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

ERROR_VARIABLE <结果>

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