C/C++、Qt开发,跨平台CMake判断当前平台是Linux还是Windows,操作系统判断
2023-09-14 09:09:33 时间
一、CMake文档
1、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()
相关文章
- linux文件系统(四)——软连接与硬连接
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
- 安装Linux后修改grub默认启动选项
- Qt音视频开发06-海康sdk内核linux客户端
- linux下压缩命令gzip使用
- Qt 进程守护程序(windows、linux)
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )
- 嵌入式linux开发,Qt,.pro文件中进行宏定义,以区分不同平台引用的三方库
- Qt开发,跨平台,区分windows和linux
- 嵌入式linux开发,qt报错:131: Error: no such instruction: `swpb %sil,%al,[%rdx]‘
- GO语言教程(一)Linux( Centos)下Go的安装, 以及HelloWorld
- Linux系统大神随笔
- Linux 常用命令ls
- linux 常用命令行 大全
- 第三篇:深入底层,Linux五种IO模型全解析
- Linux下CMake简明教程(10) 定义宏来控制打印的信息
- 嵌入式linux开发,qt移植,交叉编译qt-everywhere-opensource-src-4.8.5