CMake のcmake_host_system_information コマンドは、さまざまなホスト システム情報を照会するために使用され、その形式は次のとおりです。
cmake_host_system_information(RESULT <variable> QUERY <key> ...) # 1
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>]) # 2
1. cmake を実行しているホスト システムのシステム情報を照会します。照会する情報を選択するために、1 つ以上の <key> を指定できます。<変数>にはクエリ値のリストが格納されています。
<key> には次の値を指定できます:
(1).NUMBER_OF_LOGICAL_CORES: 論理コアの数
(2).NUMBER_OF_PHYSICAL_CORES: 物理コアの数
(3).HOSTNAME: ホスト名
(4).FQDN: 完全修飾ドメイン名
(5) .TOTAL_VIRTUAL_MEMORY: 総仮想メモリ量 (MB)
(6).AVAILABLE_VIRTUAL_MEMORY: 利用可能な仮想メモリ量 (MB)
(7).TOTAL_PHYSICAL_MEMORY: 総物理メモリ量 (MB)
(8).AVAILABLE_PHYSICAL_MEMORY: 利用可能な物理メモリ量(MB)
(9).IS_64BIT :プロセッサが 64 ビットの場合は 1
(10).HAS_FPU: プロセッサに浮動小数点ユニット (浮動小数点ユニット) がある場合は 1
(11).HAS_MMX: プロセッサが MMX 命令をサポートしている場合は 1
( 12).HAS_MMX_PLUS: プロセッサが拡張 MMX 命令をサポートする場合は 1
(13).HAS_SSE: プロセッサが SSE 命令をサポートする場合は 1
(14).HAS_SSE2: プロセッサが SSE2 命令をサポートする場合は 1 (15).HAS_SSE_FP:
プロセッサが SSE FP 命令をサポートする場合は 1 (
16).HAS_SSE_MMX: プロセッサが SSE MMX 命令をサポートする場合は 1 (
17).HAS_AMD_3DNOW: HAS_AMD_3DNOW_PLUS: プロセッサがAMD 3DNow
+ 命令をサポートする場合は 1
(19)。HAS_IA64: IA64 プロセッサが x86 をエミュレートする場合は
1 (20)。HAS_SERIAL_NUMBER: プロセッサにシリアル番号がある場合は 1
(21)。 PROCESSOR_SERIAL_NUMBER: プロセッサのシリアル番号
(22).PROCESSOR_NAME: プロセッサ名
(23).PROCESSOR_DESCRIPTION: 完全なプロセッサの説明
(24).OS_NAME : CMake が実行されるオペレーティング システムの名前
。CMAKE_HOST_SYSTEM_NAME (25).OS_RELEASEを参照してください。-type (OS サブタイプ)、たとえば Windows Professional
(26).OS_VERSION: オペレーティング システムのビルトイン バージョン ID
(27).OS_PLATFORM: オペレーティング システム プラットフォーム
(28).DISTRIB_INFO: /etc/os-release ファイルを読み取り、読み取った変数リストを <variable> に割り当てます
(29).DISTRIB_<name>: <name> 変数が /etc/os-release ファイルに存在する場合/etc/os-release ファイルが見つから
ない場合、コマンドは、フォールバック スクリプトを介して OS 識別情報を収集しようとします (コマンドは、フォールバック スクリプトを介して OS 識別情報を収集しようとします). フォールバック スクリプトは、さまざまなディストリビューション固有のファイルを使用して、OS 識別情報を収集できます。データを取得し、それを os-release 変数にマップします (フォールバック スクリプトは、さまざまなディストリビューション固有のファイルを使用して、OS 識別データを収集し、それを os-release 変数にマップできます)。
cmake_host_system_information(RESULT info QUERY NUMBER_OF_LOGICAL_CORES NUMBER_OF_PHYSICAL_CORES HOSTNAME)
message(STATUS "${info}")
cmake_host_system_information(RESULT info QUERY TOTAL_VIRTUAL_MEMORY AVAILABLE_VIRTUAL_MEMORY TOTAL_PHYSICAL_MEMORY AVAILABLE_PHYSICAL_MEMORY)
message(STATUS "${info}")
cmake_host_system_information(RESULT info QUERY IS_64BIT HAS_FPU HAS_SSE2 HAS_AMD_3DNOW)
message(STATUS "${info}")
cmake_host_system_information(RESULT info QUERY HAS_SERIAL_NUMBER PROCESSOR_SERIAL_NUMBER PROCESSOR_NAME PROCESSOR_DESCRIPTION)
message(STATUS "${info}")
cmake_host_system_information(RESULT info QUERY OS_NAME OS_RELEASE OS_VERSION OS_PLATFORM)
message(STATUS "${info}")
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()
2. Windows レジストリのクエリ: ローカル コンピュータのレジストリ サブキー (レジストリ サブキー) でクエリ操作を実行します。
注: Windows 以外のプラットフォームのレジストリをクエリすると、常に空の文字列が返され、サブオプション ERROR_VARIABLE で指定されます。エラー メッセージを設定します。変数で。
テスト コードを実行するには、いくつかのファイルが必要です。
build.shの内容は以下の通り
#! /bin/bash
# supported input parameters(cmake commands)
params=(function macro cmake_parse_arguments \
find_library find_path find_file find_program find_package \
cmake_policy cmake_minimum_required project include \
string list set foreach message option if while return \
math file configure_file \
include_directories add_executable add_library link_libraries target_link_libraries install \
target_sources add_custom_command add_custom_target \
add_subdirectory aux_source_directory \
set_property set_target_properties define_property \
add_definitions target_compile_definitions target_compile_features \
add_compile_options target_include_directories link_directories \
add_link_options target_precompile_headers cmake_host_system_information)
usage()
{
echo "Error: $0 needs to have an input parameter"
echo "supported input parameters:"
for param in ${params[@]}; do
echo " $0 ${param}"
done
exit -1
}
if [ $# != 1 ]; then
usage
fi
flag=0
for param in ${params[@]}; do
if [ $1 == ${param} ]; then
flag=1
break
fi
done
if [ ${flag} == 0 ]; then
echo "Error: parameter \"$1\" is not supported"
usage
exit -1
fi
if [[ ! -d "build" ]]; then
mkdir build
cd build
else
cd build
fi
echo "==== test $1 ===="
# test_set.cmake: cmake -DTEST_CMAKE_FEATURE=$1 --log-level=verbose ..
# test_option.cmake: cmake -DTEST_CMAKE_FEATURE=$1 -DBUILD_PYTORCH=ON ..
cmake -DTEST_CMAKE_FEATURE=$1 ..
# It can be executed directly on the terminal, no need to execute build.sh, for example: cmake -P test_set.cmake
make
# make install # only used in cmake files with install command
主な CMakeLists.txt の内容は次のとおりです。
cmake_minimum_required(VERSION 3.22)
project(cmake_feature_usage)
message("#### current cmake version: ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
include(test_${TEST_CMAKE_FEATURE}.cmake)
message("==== test finish ====")
test_cmake_host_system_information.cmake の内容は、上記のすべてのテスト コード セグメントです。
考えられる実行結果を次の図に示します。