跨平台CMake判断当前平台是Linux还是Windows

编程知识 更新时间:2023-04-06 21:57:48

当我们的工程需要跨平台时(一般都是Linux和Windows双平台),写的CMake也会有所区别,所以需要判断当前的平台,执行不同的构建指令。Cmake本身提供了很多变量来判断当前的系统环境,如图下所示:

(图片来自CMake适配多个操作系统(Windows和Linux)_MKleee的博客-CSDN博客_cmake 操作系统)

我们查看几个变量在不同平台下CMake构建时的值有何不同

message("CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_NAME} ")
message("CMAKE_HOST_SYSTEM: ${CMAKE_HOST_SYSTEM} ")

message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME} ")
message("CMAKE_SYSTEM: ${CMAKE_SYSTEM} ")

message("CMAKE_HOST_UNIX: ${CMAKE_HOST_UNIX} ")
message("CMAKE_HOST_WIN32: ${CMAKE_HOST_WIN32} ")

以下是同一份CMakeLists.txt分别在Windows和Linux下构建工程时输出的信息:

可见,有五个CMake自带变量可以很方便地识别不同平台(主要是Linux和Windows平台)

# 在 Linux 平台
CMAKE_HOST_SYSTEM_NAME = "Linux"
CMAKE_HOST_UNIX = 1
CMAKE_HOST_WIN32 = 空
UNIX = 1
WIN32 = 空

# 在 Windows 平台
CMAKE_HOST_SYSTEM_NAME = "Windows"
CMAKE_HOST_UNIX = 空
CMAKE_HOST_WIN32 = 1
UNIX = 空
WIN32 = 1

 于是识别逻辑可以这样写:使用 CMAKE_HOST_SYSTEM_NAME 判断字符串

if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")

	message("current platform: Linux ")

elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")

	message("current platform: Windows ")

else()

	message("current platform: unkonw ")

endif()

或者:使用 CMAKE_HOST_UNIX 和 CMAKE_HOST_WIN32 判断布尔值

if(CMAKE_HOST_UNIX)

	message("current platform: Linux ")

elseif(CMAKE_HOST_WIN32)

	message("current platform: Windows ")

else()

	message("current platform: unkonw ")

endif()

 或者:使用 UNIX 和 WIN32 判断布尔值

if(UNIX)

	message("current platform: Linux ")

elseif(WIN32)

	message("current platform: Windows ")

else()

	message("current platform: unkonw ")

endif()

更多推荐

跨平台CMake判断当前平台是Linux还是Windows

本文发布于:2023-04-06 21:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/7e20288a776f4ca90b6f0581ed1e8b43.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:平台   CMake   Windows   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 51000文章数
  • 14阅读数
  • 0评论数