CMake中cmake_host_system_information的使用

2023-05-16

      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的主机系统的系统信息。可以提供一个或多个<key>来选择要查询的信息。查询值列表存储在<variable>中。
      <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: 如果处理器具有浮点单元(floating point unit),则为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: 如果处理器支持AMD 3DNow指令,则为1
      (18).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: 操作系统子类型(OS sub-type),如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文件,该命令尝试通过回退脚本收集操作系统标识(the command tries to gather OS identification via fallback scripts).回退脚本可以使用各种特定于发行版的文件来收集操作系统标识数据,并将其映射到os-release变量中(the fallback script can use various distribution-specific files to collect OS identification data and map it into os-release variables)。

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注册表:对本地计算机注册表子项(registry subkey)执行查询操作.
      注意:查询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内容为上面的所有测试代码段

      可能的执行结果如下图所示: 

      GitHub:https://github.com/fengbingchun/Linux_Code_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake中cmake_host_system_information的使用 的相关文章

随机推荐

  • ROS与STM32通信的实现

    ROS功能包与STM32工程文件 xff1a 蓝奏云 xff1a https huffie lanzouw com iN7w602ti37a 1 通信协议 STM32和ROS端各有一个数据发送函数和数据接收函数 xff0c 发送和接受的数据
  • C语言 字符串最后一位可用’\0‘标示

  • 基于C#的工控上位机软件开发从入门到学废,需要几步?

    基于C 的工控上位机软件开发从入门到学废 xff0c 需要几步 xff1f 随着工控产品的应用 xff0c 开始大幅度渗透进民用领域 涉及的工控产品范围广泛 xff0c 如PLC DCS 变频器 仪表 电机 SCADA 低压及配电元器件等
  • 工作生活篇之第六天

    工作生活篇之第六天 最近由于疫情的影响 xff0c 国家电网也发布了最新消息 xff0c 电费在欠额的情况可继续使用 本来我是以为只有电费欠费可以继续使用 xff0c 没想到燃气费也是 xff0c 最近燃气费不多了 xff0c 然后还得去银
  • 工作生活篇之第九篇

    工作生活篇之第九篇 一直觉得这世上告别仪式挺多的 xff0c 比如喝酒 旅行 xff0c 或干脆痛哭一场 xff0c 可是后来才知道 xff0c 人生中大部分告别是悄无声息的 xff0c 原来某天的相见 xff0c 竟已是最后一面 xff0
  • ROS:查看ROS相关信息的常用方法(三)

    文章目录 一 ROS命令与节点话题查看1 rosnode2 rostopic3 rostopic info 话题名称4 rosrun rqt graph rqt graph 二 rqt工具与节点话题查看 一 ROS命令与节点话题查看 1 r
  • 【算法】基于STM32的MPU6050卡尔曼滤波算法(入门级)

    1 简介 卡尔曼滤波 xff08 Kalman filtering xff09 是一种利用线性系统状态方程 xff0c 通过系统输入输出观测数据 xff0c 对系统状态进行最优估计的算法 由于观测数据中包括系统中的噪声和干扰的影响 xff0
  • 爬虫的爬取策略: 宽度优先与深度优先

    64 爬取策略 xff1a 宽度优先与深度优先 1 分别的优缺点 2 什么场景下用 xff1f 爬虫的抓取策略 在爬虫系统中 xff0c 待抓取URL队列是很重要的一部分 待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题 x
  • shell脚本内调用另外一个shell脚本的几种方法

    有时会在一个shell脚本 如test call other shell sh 中调用另外一个shell脚本 如parameter usage sh xff0c 这里总结几种可行的方法 xff0c 这些方法在linux上和windows上
  • 真实项目开发的input标签焦点事件运用

    真实项目开发中input标签焦点事件的运用 开发工具与关键技术 xff1a VisualStudio C 作者 xff1a 落白 撰写时间 xff1a 2019 6 15 在开发项目时有时候会需要这么一个功能效果 xff0c 比如有六个in
  • layui use 定义js外部引用函数

    layui use 加载layui define 定义的模块 xff0c 当外部 js 或 onclick调用 use 内部函数时 xff0c 需要在 use 中定义 window 函数供外部引用 window span class tok
  • shell脚本中内嵌可执行文件/文件

    示例 test sh span class token operator span span class token operator span bin span class token operator span sh 追加在shell脚
  • 浅谈嵌入式

    浅谈嵌入式 相比耳熟能详的互联网行业 xff0c 嵌入式这几个字眼出现在公众眼前的几率可以达到忽略不计的程度 xff0c 这不仅说明嵌入式行业的工程师数量远比互联网少 xff0c 同时意味着嵌入式行业的吸引力貌似低于互联网 但是 xff0c
  • C语言系列(一):C语言程序概述

    C语言作为一种高级程序设计语言 xff0c 既有高级语言的方便性 灵活性和通用性等特点 xff0c 又兼具低级语言的特性 xff0c 提供程序员直接操作计算机硬件的功能 适合各种类型的软件开发 xff0c 深受软件工程技术人员的青睐 嵌入式
  • C语言系列(三):基本数据类型与表达式

    计算机中的数据不单是简单的数字 xff0c 所有计算机处理的信息 xff0c 包括文字 声音 图像等都是以一定的数据形式存储的 xff0c 数据在内存中保存 xff0c 存放的情况由数据类型决定 C语言的数据类型 基本类型 xff1a 整型
  • C语言系列(四): 分支结构程序设计

    选择结构是程序设计3种基本结构之一 xff0c 通过判定给定的条件是否成立选择需要执行的操作 C语言提供了条件语句 if语句和switch语句 用以实现选择结构的程序设计 xff0c 条件通常用关系表达式或逻辑表达式表示 C语言提供3种逻辑
  • C语言系列(五):循环结构程序设计

    循环结构是结构化程序设计的基本结构之一 xff0c C语言提供了三种循环结构语句 while语句 xff0c do while语句和for语句 for语句在C语言系列 xff08 二 xff09 xff1a 用C语言编写程序已经讲解 xff
  • C语言系列(六):函数与预编译处理

    模块化程序设计方法 在程序设计与开发中 xff0c 随着解决问题的复杂化 xff0c 编写程序的代码也更加复杂 一方面 xff0c 大量的程序语句会使程序的逻辑结构产生混乱 xff0c 给程序的编写 阅读和维护带来困难 xff1b 另一方面
  • Linux驱动开发经典面试简答题

    1 Linux设备中字符设备与设备有什么主要的区别 xff1f 请分别举例一些实际的设备说出它们是哪一类设备 字符设备 xff1a 字符设备是个能够像字节流 xff08 类似文件 xff09 一样被访问的设备 xff0c 由字符设备驱动程序
  • CMake中cmake_host_system_information的使用

    CMake中的cmake host system information命令用于查询各种主机系统信息 xff0c 其格式如下 xff1a cmake host system information RESULT lt variable gt