CMake识别操作系统平台及Linux发行版本是ubuntu/centos

识别操作系统平台

以下代码可以识别 Windows、Linux、Macos三种类型的操作系统平台:

IF (CMAKE_SYSTEM_NAME MATCHES "Linux") 
    MESSAGE(STATUS "current platform: Linux ") 
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") 
    MESSAGE(STATUS "current platform: Windows") 
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Darwin") 
    MESSAGE(STATUS "current platform: Mac OS X") 
ELSE () 
    MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}") 
ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux") 

在2.6版本以上的cmake上就可以使用以上内置变量,非常方便。

识别Linux发行版本

这就需要更详细的系统信息了,类似的,可以识别Windows系统的具体版本。

如果cmake版本在3.22以上,可以直接使用cmake_host_system_information变量,原型如下:

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

使用它查询系统信息,可以在key处指定多个待查询的指标,查询结果会存储在variable的list中。

经常使用key如下:

  • NUMBER_OF_LOGICAL_CORES:逻辑核数量
  • NUMBER_OF_PHYSICAL_CORES:物理核数量
  • HOSTNAME:主机名
  • FQDN:全限定域名,同时带有主机名和域名的名称
  • TOTAL_VIRTUAL_MEMORY:总虚拟内存,单位MB
  • AVAILABLE_VIRTUAL_MEMORY:可用虚拟内存
  • TOTAL_PHYSICAL_MEMORY:总物理内存
  • AVAILABLE_PHYSICAL_MEMORY:可用物理内存
  • IS_64BIT:如果处理器是64位,值为1
  • HAS_FPU:如果处理器支持浮点单元,值为1
  • PROCESSOR_NAME:处理器名称,如我的电脑上输出“Unknown P6 family”
  • PROCESSOR_DESCRIPTION:处理器描述,如“8 core Intel® Xeon® CPU E5640 @ 2.67GHz”
  • OS_NAME:操作系统名称,如“Linux”
  • OS_RELEASE:操作系统发行信息,如“4.15.0-161-generic”
  • OS_VERSION:操作系统版本,如“#169-Ubuntu SMP Fri Oct 15 13:41:54 UTC 2021”
  • OS_PLATFORM:操作系统平台,如“x86_64”
  • DISTRIB_INFO:3.22版本提供,根据/etc/os-release文件确定查询的变量
  • DISTRIB_:3.22版本提供,如果/etc/os-release文件中存在name变量,则获取它

除指定3.22版本的特性外,其他特性在3.10版本都已提供。

具体使用如下:

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`

可以看到,它输出了详细的系统信息,通过第一行即可判断出Linux的发行版本,如:

IF (${PRETTY_NAME} MATCHES "Ubuntu")
		MESSAGE(STATUS "Linux dist: ubuntu")
ENDIF

如果cmake版本较低,可以通过执行Linux脚本的方式获取发行版本。

关于cmake中执行Linux命令的方式,请参考CMake中执行shell命令之execute_process、add_custom_target和add_custom_command

小结

cmake提供了许多变量可以直接使用,随着cmake的迭代升级,也越来越多地推出了很多新功能。

所以要保持学习,这样看似很难的工作,其实一个变量就搞定了。

参考资料

cmake_host_system_information

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值