cmake_host_system_information
Запрос различной информации о хост-системе.
Сводка
Query host system specific information cmake_host_system_information(RESULT <variable> QUERY <key> ...) Query the 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 -
Общий объём виртуальной памяти в МиБ [1]
-
AVAILABLE_VIRTUAL_MEMORY -
Доступный объём виртуальной памяти в МиБ [1]
-
TOTAL_PHYSICAL_MEMORY -
Общий объём физической памяти в МиБ [1]
-
AVAILABLE_PHYSICAL_MEMORY -
Доступный объём физической памяти в МиБ [1]
-
IS_64BIT -
Добавлено в версии 3.10.
1, если процессор 64-разрядный
-
HAS_FPU -
Добавлено в версии 3.10.
1, если процессор имеет блок обработки чисел с плавающей запятой
-
HAS_MMX -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции MMX
-
HAS_MMX_PLUS -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции Ext. MMX
-
HAS_SSE -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции SSE
-
HAS_SSE2 -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции SSE2
-
HAS_SSE_FP -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции SSE FP
-
HAS_SSE_MMX -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции SSE MMX
-
HAS_AMD_3DNOW -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции 3DNow
-
HAS_AMD_3DNOW_PLUS -
Добавлено в версии 3.10.
1, если процессор поддерживает инструкции 3DNow+
-
HAS_IA64 -
Добавлено в версии 3.10.
1, если процессор IA64 эмулирует x86
-
HAS_SERIAL_NUMBER -
Добавлено в версии 3.10.
1, если процессор имеет серийный номер
-
HAS_APIC -
Добавлено в версии 4.3.
1, если процессор поддерживает APIC
-
HAS_L1_CACHE -
Добавлено в версии 4.3.
1, если процессор имеет кэш L1
-
PROCESSOR_SERIAL_NUMBER -
Добавлено в версии 3.10.
Серийный номер процессора
-
PROCESSOR_NAME -
Добавлено в версии 3.10.
Человекочитаемое имя процессора
-
PROCESSOR_DESCRIPTION -
Добавлено в версии 3.10.
Полное человекочитаемое описание процессора
-
LOCALE_CHARSET -
Добавлено в версии 4.3.
Набор символов локали, если он известен; в противном случае — пустая строка.
Это кодировка, ожидаемая в файлах и скриптах
cmake-language(7):- В Windows это всегда
UTF-8. - В UNIX и macOS определяется текущей локалью.
- В Windows это всегда
-
OS_NAME -
Добавлено в версии 3.10.
Название операционной системы хоста:
- На платформах UNIX это
uname -s. - На платформах Apple это
sw_vers -productName. - В Windows это
Windows.
См. также
CMAKE_HOST_SYSTEM_NAME. - На платформах UNIX это
-
OS_RELEASE -
Добавлено в версии 3.10.
Подтип ОС, например в Windows —
Professional -
OS_VERSION -
Добавлено в версии 3.10.
Идентификатор сборки ОС
-
OS_PLATFORM -
Добавлено в версии 3.10.
-
MSYSTEM_PREFIX -
Добавлено в версии 3.28.
Доступно только на хостах Windows. В среде разработки MSYS или MinGW, задающей переменную среды
MSYSTEM, содержит префикс её установки. В противном случае это пустая строка. -
FAMILY_ID -
Добавлено в версии 4.3.
Название семейства процессора
-
MODEL_ID -
Добавлено в версии 4.3.
Идентификатор модели процессора
-
MODEL_NAME -
Добавлено в версии 4.3.
Название модели процессора
-
PROCESSOR_APIC_ID -
Добавлено в версии 4.3.
Идентификатор APIC процессора
-
PROCESSOR_CACHE_SIZE -
Добавлено в версии 4.3.
Размер кэша L1 процессора
-
PROCESSOR_CLOCK_FREQUENCY -
Добавлено в версии 4.3.
Тактовая частота процессора
-
VENDOR_ID -
Добавлено в версии 4.3.
Идентификатор производителя процессора
-
VENDOR_STRING -
Добавлено в версии 4.3.
Строка производителя процессора
-
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>в этом списке.
Пример:
# 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-разрядное представление реестра. В
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 -
Запрашивает представление реестра, соответствующее архитектуре хоста:
64на64bit Windowsи32на32bit Windows. -
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> -
Возвращает ошибки, возникшие при выполнении запроса. В случае успеха переменная содержит пустую строку.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/cmake_host_system_information.html