CMake での cmake_host_system_information の使用

      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 の内容は、上記のすべてのテスト コード セグメントです。

      考えられる実行結果を次の図に示します。 

      GitHubhttps://github.com/fengbingchun/Linux_Code_Test

おすすめ

転載: blog.csdn.net/fengbingchun/article/details/129108910