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_MEMORYMiB 中的总虚拟内存 [1]
AVAILABLE_VIRTUAL_MEMORYMiB 中的可用虚拟内存 [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 版本加入.
OS_RELEASE在 3.10 版本加入.
操作系统子类型,例如在 Windows
ProfessionalOS_VERSION在 3.10 版本加入.
操作系统构建 ID
OS_PLATFORM在 3.10 版本加入.
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> 必须包含一个有效的根密钥。本地计算机的有效根密钥是:
HKLM或HKEY_LOCAL_MACHINEHKCU或HKEY_CURRENT_USERHKCR或HKEY_CLASSES_ROOTHKU或HKEY_USERSHKCC或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)”来标识。子键请求在
<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上的64和32 位 Windows上的32。目标查询与 CMAKE_SIZEOF_VOID_P 变量指定的体系结构相匹配的注册表。如果未定义,则回退到
HOST视图。两者查询两个视图(
32和64)。顺序取决于以下规则:如果定义了 CMAKE_SIZEOF_VOID_P 变量。根据此变量的内容使用以下视图:8:64_324:32_64
如果未定义
CMAKE_SIZEOF_VOID_P变量,则取决于主机的体系结构:64位:64_3232位:32
分隔符为
REG_MULTI_SZ类型指定分隔符。如果未指定,则使用字符“0”。ERROR_VARIABLE <结果>返回查询操作期间引发的任何错误。如果成功,该变量将保存一个空字符串。