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

当我们的工程需要跨平台时(一般都是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()

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CMake是一个跨平台的构建工具,可以帮助开发人员在不同操作系统上生成可执行文件或库。它提供了一种简洁的方式来定义项目的构建过程,使得项目能够在不同的平台上进行构建。 要让CMake跨平台工作,需要注意以下几点: 1. 使用平台无关的CMake命令和语法:CMake提供了一组与平台无关的命令和语法,开发者可以使用这些命令定义项目的构建过程。这些命令会根据不同的平台自动适配相应的构建规则。 2. 使用变量和条件语句:CMake支持变量和条件语句,可以根据不同平台的需求进行不同的构建设置。通过设置变量和使用条件语句,可以根据不同的平台选择不同的选项、路径等。 3. 使用Find模块:CMake提供了一些内置的Find模块,可以用于在不同的操作系统上查找特定库或工具。这些模块根据不同平台的特点进行适配,可以方便地在不同平台上使用相同的配置。 4. 使用Generator和Generator Expressions:CMake支持多种生成器,如Unix Makefiles、Visual Studio等。根据不同平台选择合适的生成器,并使用Generator Expressions根据不同的构建配置生成不同的代码。 5. 编写平台特定的代码:有时候,为了让项目能够在不同平台上正常工作,可能需要编写平台特定的代码。可以使用CMake的条件编译功能,根据不同的平台编译不同的代码。 6. 测试和验证:在跨平台开发过程中,测试和验证是非常重要的环节。确保在不同平台上都进行充分的测试,并验证项目在不同平台上的功能和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值