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 位,则为 One

HAS_FPU

在版本 3.10 中添加。

如果处理器具有浮点运算单元,则为 One

HAS_MMX

在版本 3.10 中添加。

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

HAS_MMX_PLUS

在版本 3.10 中添加。

如果处理器支持 Ext. MMX 指令,则为 One

HAS_SSE

在版本 3.10 中添加。

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

HAS_SSE2

在版本 3.10 中添加。

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

HAS_SSE_FP

在版本 3.10 中添加。

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

HAS_SSE_MMX

在版本 3.10 中添加。

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

HAS_AMD_3DNOW

在版本 3.10 中添加。

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

HAS_AMD_3DNOW_PLUS

在版本 3.10 中添加。

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

HAS_IA64

在版本 3.10 中添加。

模拟 x86 的 IA64 处理器

HAS_SERIAL_NUMBER

在版本 3.10 中添加。

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

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 中添加。

操作系统内部版本

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 中添加。

如果 /etc/os-release 文件中存在 <name> 变量(参见 man 5 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 上的 6432bit Windows 上的 32

目标

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

两者

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

  • 8: 64_32

  • 4: 32_64

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

  • 64 位64_32

  • 32 位32

分隔符

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

ERROR_VARIABLE <result>

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