一、判断操作系统类型
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