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 版本新增。
如果
/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
文件,该命令会尝试通过回退脚本收集 OS 标识。回退脚本可以使用 各种特定于发行版的文件 来收集 OS 标识数据并将其映射到 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>
变量的名称存储在此列表中。
示例
# 000-FallbackScript.cmake
#
# 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)
然后可以将此脚本用作回退,以确定缺少的主机系统信息
list(
APPEND
CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS
${CMAKE_CURRENT_SOURCE_DIR}/000-FallbackScript.cmake
)
cmake_host_system_information(RESULT info QUERY DISTRIB_INFO)
脚注
查询 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 位注册表。在
32 位 Windows
上,始终返回空字符串。32
查询 32 位注册表。
64_32
对于
VALUE
子选项或默认值,使用视图64
查询注册表,如果请求失败,则使用视图32
查询注册表。对于VALUE_NAMES
和SUBKEYS
子选项,查询两个视图(64
和32
)并合并结果(已排序并去重)。32_64
对于
VALUE
子选项或默认值,使用视图32
查询注册表,如果请求失败,则使用视图64
查询注册表。对于VALUE_NAMES
和SUBKEYS
子选项,查询两个视图(32
和64
)并合并结果(已排序并去重)。HOST
查询与主机架构匹配的注册表:在
64 位 Windows
上为64
,在32 位 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>
返回查询操作期间引发的任何错误。如果成功,变量将保留一个空字符串。