admin管理员组文章数量:1794759
跨平台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()版权声明:本文标题:跨平台CMake判断当前平台是Linux还是Windows 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686875616a113548.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论