Cmake命令之cmake_host_system_information

本文介绍了CMake中的cmake_host_system_information命令,展示了如何查询主机名、核心数、内存、处理器和操作系统信息。通过示例代码展示了如何在CMakeLists.txt中使用这些功能并获取具体结果。

代码在git

原文

一、命令格式

cmake_host_system_information(RESULT <variable> QUERY <key> ...)

  查询CMake运行环境的系统信息,<key>指定待查询的信息,可以有多个,查询结果存放在<variable>中。

  <key>可以是主机名称、内存信息、CPU信息等等,<key>的所有取值可以参考本文的第三章节更多细节

二、示例

# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(host_info)
cmake_host_system_information(RESULT var QUERY HOSTNAME)
message("hostname: ${var}")
cmake_host_system_information(RESULT var QUERY NUMBER_OF_LOGICAL_CORES NUMBER_OF_PHYSICAL_CORES)
message("cores: ${var}")
cmake_host_system_information(RESULT var QUERY TOTAL_VIRTUAL_MEMORY TOTAL_PHYSICAL_MEMORY)
message("memory(MB): ${var}")
cmake_host_system_information(RESULT var QUERY PROCESSOR_NAME)
message("processor name: ${var}")
cmake_host_system_information(RESULT var QUERY OS_NAME OS_RELEASE OS_VERSION OS_PLATFORM)
message("os information: ${var}")

  我的是macOS,执行结果如下:

hostname: myBookAir
cores: 4;2
memory(MB): 5120;4096
processor name: Intel(R) Core(TM) i5-5250U CPU @ 1.60GHz
os information: Mac OS X;10.13.6;17G14019;x86_64

三、更多细节

  <key>的取值如下:

  • NUMBER_OF_LOGICAL_CORES:逻辑核心数量。
  • NUMBER_OF_PHYSICAL_CORES:物理核心数量。
  • HOSTNAME:主机名称。
  • FQDN:主机域名全称。
  • TOTAL_VIRTUAL_MEMORY:总虚拟内存,单位是M
  • AVAILABLE_VIRTUAL_MEMORY:可用虚拟内存,单位是M
  • TOTAL_PHYSICAL_MEMORY:总物理内存,单位是M
  • AVAILABLE_PHYSICAL_MEMORY:可用物理内存,单位是M
  • IS_64BIT:如果处理器是64位,查询结果为1
  • HAS_FPU:如果处理器拥有浮点处理单元,查询结果为1
  • HAS_MMX:如果处理器支持MMX指令集,查询结果为1
  • HAS_MMX_PLUS:如果处理器支持Ext. MMX指令集,查询结果为1
  • HAS_SSE:如果处理器支持SSE指令集,查询结果为1
  • HAS_SSE2:如果处理器支持SSE2指令集,查询结果为1
  • HAS_SSE_FP:如果处理器支持SSE FP指令集,查询结果为1
  • HAS_SSE_MMX:如果处理器支持SSE MMX指令集,查询结果为1
  • HAS_AMD_3DNOW:如果处理器支持3DNow指令集,查询结果为1
  • HAS_AMD_3DNOW_PLUS:如果处理器支持3DNow+指令集,查询结果为1
  • HAS_IA64:如果IA64处理器可以模拟X86,查询结果为1
  • HAS_SERIAL_NUMBER:如果处理器有序列号,查询结果为1
  • PROCESSOR_SERIAL_NUMBER:处理器序列号。
  • PROCESSOR_NAME:可读的处理器全称。
  • OS_NAME:操作系统名称,也就是uname -s的输出,三大操作系统对应的名称是LinuxWindowsDarwinmasOS),也可以通过CMAKE_HOST_SYSTEM_NAME变量获取。
  • OS_RELEASE:操作系统子类型,例如Windows Professional
  • OS_VERSION:操作系统构建ID
  • OS_PLATFORM:处理器架构,Windows下可以通过PROCESSOR_ARCHITECTURE变量获取,Unix/Linux/macOS等平台可以通过uname -muname -p获取。也可以通过CMAKE_HOST_SYSTEM_PROCESSOR变量获取。

附录:参考文档
  1. https://cmake.org/cmake/help/latest/command/cmake_host_system_information.html
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(signal VERSION 3.28) project(MyFortranProject LANGUAGES Fortran) include(GNUInstallDirs) include(CMakePackageConfigHelpers) add_library(myshared SHARED ${SOURCES}) set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC") message(STATUS "Fortran编译器: ${CMAKE_Fortran_COMPILER}") project(MyProject VERSION 1.0.0) # 定义 signal 目标(假设使用 degrad.f) set(signal_SOURCE_FILE src/degrad.f) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${signal_SOURCE_FILE}") message(FATAL_ERROR "Source file for signal target not found! Please check the path: ${CMAKE_CURRENT_SOURCE_DIR}/${signal_SOURCE_FILE}") endif() add_library(signal SHARED ${signal_SOURCE_FILE}) set_target_properties(signal PROPERTIES LINKER_LANGUAGE Fortran) # 设置 signal 目标的编译选项 target_compile_options(signal PRIVATE -std=legacy) # 设置 signal 目标的属性 set_target_properties(signal PROPERTIES VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}") add_library(signal::signal ALIAS signal) # 定义 Signal 目标(使用 signal.cc) set(SIGNAL_SOURCE_FILE src/signal.cc) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SIGNAL_SOURCE_FILE}") message(FATAL_ERROR "Source file for Signal target not found! Please check the path: ${CMAKE_CURRENT_SOURCE_DIR}/${SIGNAL_SOURCE_FILE}") endif() add_library(Signal SHARED ${SIGNAL_SOURCE_FILE}) set_target_properties(Signal PROPERTIES LINKER_LANGUAGE C) # 配置输入文件路径 set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/signalConfig.cmake.in") # 输出当前工作目录 message(STATUS "Current working directory: ${CMAKE_CURRENT_SOURCE_DIR}") # 输出解析后的输入文件路径 message(STATUS "Resolved input file path: ${INPUT_FILE}") # 检查输入文件是否存在 if(NOT EXISTS "${INPUT_FILE}") message(FATAL_ERROR "Input file not found! Please check the path: ${INPUT_FILE}") endif() # 确保输出目录存在 set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") file(MAKE_DIRECTORY "${OUTPUT_DIR}") # 配置文件 configure_file("${INPUT_FILE}" "${OUTPUT_DIR}/signalConfig.cmake" @ONLY) # 安装配置文件 install(FILES "${OUTPUT_D
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值