Spec-Zone.ru › CMake

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 определяется текущей локалью.
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.

Идентификатор сборки ОС

OS_PLATFORM

Добавлено в версии 3.10.

См. CMAKE_HOST_SYSTEM_PROCESSOR

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)

Сноски

[1] (1,2,3,4)

1 МиБ (мебибайт) равен 1024x1024 байтам.

Запрос реестра 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API