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 版本中添加。
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>
必须包含有效的根键。本地计算机的有效根键是
HKLM
或HKEY_LOCAL_MACHINE
HKCU
或HKEY_CURRENT_USER
HKCR
或HKEY_CLASSES_ROOT
HKU
或HKEY_USERS
HKCC
或HKEY_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_NAMES
和SUBKEYS
子选项,查询两个视图(64
和32
)并合并结果(排序并删除重复项)。32_64
对于
VALUE
子选项或默认值,使用视图32
查询注册表,如果请求失败,则使用视图64
查询注册表。对于VALUE_NAMES
和SUBKEYS
子选项,查询两个视图(32
和64
)并合并结果(排序并删除重复项)。HOST
查询与主机架构匹配的注册表:在
64bit Windows
上为64
,在32bit Windows
上为32
。TARGET
查询与
CMAKE_SIZEOF_VOID_P
变量指定的架构匹配的注册表。如果未定义,则回退到HOST
视图。BOTH
查询两个视图(
32
和64
)。顺序取决于以下规则:如果定义了CMAKE_SIZEOF_VOID_P
变量。根据此变量的内容使用以下视图8
:64_32
4
:32_64
如果未定义
CMAKE_SIZEOF_VOID_P
变量,则依赖于主机的架构64bit
:64_32
32bit
:32
SEPARATOR
为
REG_MULTI_SZ
类型指定分隔符字符。如果未指定,则使用字符\0
。ERROR_VARIABLE <result>
返回查询操作期间引发的任何错误。如果成功,则该变量包含一个空字符串。