QT判断操作系统类型和CPU架构

一、判断操作系统类型

1.在.pro文件中判断
cpp 复制代码
macx {
# mac only
}
unix:!macx{
# linux only
}
win32 {
# windows only
}
2.在代码中判断

可以包含QGlobal头文件,判断预定义宏

cpp 复制代码
#include <QtGlobal>
...
#ifdef Q_OS_MAC
// mac
#endif
 
#ifdef Q_OS_LINUX
// linux
#endif
 
#ifdef Q_OS_WIN32
// win
#endif
 
#ifdef __arm__
// arm
#endif

二、判断当前编译器对应的CPU架构类型

1.在.pro中判断
cpp 复制代码
//32位
contains(QT_ARCH, i386){		//x86架构 32位
    CONFIG(release, release | debug){
        DESTDIR = $$PWD/bin/x86/release
    } else {
        DESTDIR = $$PWD/bin/x86/debug
    }
}
//64位
contains(QT_ARCH, x86_64){		//x86架构 64位
    CONFIG(release, release | debug){
        DESTDIR = $$PWD/bin/x64/release
    } else {
        DESTDIR = $$PWD/bin/x64/debug
    }
}

contains(QT_ARCH, arm64){
message("arm64") #在这里处理arm64所需
}else{
message("x86")
}

//打印出CPU架构类型
message($$QT_ARCH)

QT_ARCH是 Qt 构建系统中的一个变量,主要用于表示目标平台的架构。不同的架构值取决于你使用的 Qt 版本和构建环境。一般来说,QT_ARCH 的值取决于你的编译目标平台的具体架构。

常见取值:
value descripe
x86_64 表示 64 位的 x86 架构,也称为 AMD64 或 Intel 64
x86 表示 32 位的 x86 架构,也称为 IA-32
arm 表示 ARM 架构,通常用于移动设备和嵌入式系统
arm64 或 aarch64 表示 64 位的 ARM 架构,常用于现代的 ARM 处理器
mips 表示 MIPS 架构,通常用于嵌入式系统
ppc 表示 PowerPC 架构,虽然现在不那么常见,但在某些特定环境中可能会遇到
2.在代码中判断

方式1:

cpp 复制代码
 QSysInfo::WordSize=32/64。

方式2:

cpp 复制代码
#ifdef _WIN64
    qDebug()<<64;
#else
    qDebug()<<32;
#endif

这种方式只能判断Windows系统的32位和64位

且需要注意:
_WIN64只有在64位程序上才被定义;
_WIN32在64和32位程序上都会被定义

所以一般都是这样来使用这个宏定义:

cpp 复制代码
#ifdef _WIN32 //32位和64位 win
    #ifdef _WIN64 //64位 win
        cout << "Windows X64" << endl;
    #else
        cout << "Windows X86" << endl;
    #endif
#else
	cout << "Linux" << endl;
#endif

方式3:

cpp 复制代码
#if defined(__x86_64__) || defined(_M_X64)
    std::cout << "64-bit x86 architecture" << std::endl;
#elif defined(__i386__) || defined(_M_IX86)
    std::cout << "32-bit x86 architecture" << std::endl;
#elif defined(__arm__) || defined(_M_ARM)
    std::cout << "ARM architecture" << std::endl;
#elif defined(__aarch64__)
    std::cout << "64-bit ARM architecture" << std::endl;
#elif defined(__mips__)
    std::cout << "MIPS architecture" << std::endl;
#elif defined(__powerpc__)
    std::cout << "PowerPC architecture" << std::endl;
#else
    std::cout << "Unknown architecture" << std::endl;
#endif


参考链接

相关推荐
汉克老师7 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
晴天的雨.9928 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂8 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven8 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981039 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
I_belong_to_jesus19 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Rabitebla21 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
码客-ygluu1 天前
一个通用游戏数据服务器
c++·架构
another heaven1 天前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论