zl程序教程

您现在的位置是:首页 >  系统

当前栏目

C/C++、Qt开发,跨平台CMake判断当前平台是Linux还是Windows,操作系统判断

2023-09-14 09:09:33 时间

一、CMake文档

1、CMake管网

CMake

2、CMake在线帮助文档

CMake Reference Documentation — CMake 3.25.0-rc3 Documentation

3、CMake中的Variables that Describe the System

Cmake本身提供了很多变量来判断当前的系统环境,如下

cmake-variables(7) — CMake 3.25.0-rc3 Documentation

4、输出查看相关变量的值

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} ")

5、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

二、 区分不同平台

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()

2、使用 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()

3、使用 UNIX 和 WIN32 判断布尔值

if(UNIX)

    message("current platform: Linux ")

elseif(WIN32)

    message("current platform: Windows ")

else()

    message("current platform: unkonw ")

endif()

4、32位与64位判断

if(CMAKE_CL_64)
    set(CURRENT_PLATFORM "x64")
    message(STATUS "Current Platform is ${CURRENT_PLATFORM}")
else(CMAKE_CL_64)
    set(CURRENT_PLATFORM "x86")
    message(STATUS "Current Platform is ${CURRENT_PLATFORM}")
endif(CMAKE_CL_64)

if(CMAKE_CROSSCOMPILING)
    message(STATUS "Cross Comliling!!!,  ARM")
    set(CURRENT_SYSTEM "Arm")
else()
    message(STATUS "No Cross Comliling!!!")

    #根据不同平台给CURRENT_SYSTEM命名
    if(CMAKE_SYSTEM_NAME MATCHES "Linux")
        set(CURRENT_SYSTEM "Linux")
    elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
        set(CURRENT_SYSTEM "Windows")
    elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
        set(CURRENT_SYSTEM "FreeBSD")
    endif()
endif()

参考:跨平台CMake判断当前平台是Linux还是Windows_难搞哦~的博客-CSDN博客_cmake 判断平台