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 中新增。
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 中新增。
取得
<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>
必須包含有效的根機碼。本機電腦的有效根機碼為
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>
返回查詢操作期間引發的任何錯誤。如果成功,則變數會包含一個空字串。