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 中新增。

請參閱 CMAKE_HOST_SYSTEM_NAME

OS_RELEASE

在版本 3.10 中新增。

作業系統子類型,例如在 Windows 上為 Professional

OS_VERSION

在版本 3.10 中新增。

作業系統組建 ID

OS_PLATFORM

在版本 3.10 中新增。

請參閱 CMAKE_HOST_SYSTEM_PROCESSOR

MSYSTEM_PREFIX

在版本 3.28 中新增。

僅在 Windows 主機上可用。在設定了 MSYSTEM 環境變數的 MSYS 或 MinGW 開發環境中,這是它的安裝前綴。否則,這是空字串。

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> 變數的名稱。

範例

# 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> 必須包含有效的根機碼。本機電腦的有效根機碼為

  • HKLMHKEY_LOCAL_MACHINE

  • HKCUHKEY_CURRENT_USER

  • HKCRHKEY_CLASSES_ROOT

  • HKUHKEY_USERS

  • HKCCHKEY_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_NAMESSUBKEYS 子選項,請查詢兩個檢視(6432),並合併結果(排序且移除重複項)。

32_64

對於 VALUE 子選項或預設值,請使用檢視 32 查詢登錄,如果請求失敗,則使用檢視 64 查詢登錄。對於 VALUE_NAMESSUBKEYS 子選項,請查詢兩個檢視(3264),並合併結果(排序且移除重複項)。

HOST

查詢與主機架構相符的登錄:在 64 位元 Windows 上為 64,在 32 位元 Windows 上為 32

TARGET

查詢符合 CMAKE_SIZEOF_VOID_P 變數所指定架構的登錄檔。如果未定義,則回退至 HOST 視圖。

BOTH

查詢兩個視圖(3264)。順序取決於以下規則:如果定義了 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>

返回查詢操作期間引發的任何錯誤。如果成功,則變數會包含一個空字串。