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 中添加。
OS_RELEASE
在版本 3.10 中添加。
操作系统子类型,例如 Windows 中的
Professional
OS_VERSION
在版本 3.10 中添加。
操作系统内部版本
OS_PLATFORM
在版本 3.10 中添加。
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>
必须包含一个有效根项。适用于本地计算机的有效根项为
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
。目标
查询由
CMAKE_SIZEOF_VOID_P
变量指定的架构匹配的注册表。如果没有定义,则回退到HOST
视图。两者
查询两个视图(
32
和64
)。顺序取决于以下规则:如果定义了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>
返回查询操作期间出现的任何错误。如果成功,则变量保存一个空字符串。