我是QT的新手,目前在试图了解如何在主函数执行之前确定操作系统。由于我对此领域完全不熟悉,因此非常需要指导。
我想要确定程序是否在以下环境中运行:
Windows
Unix
Linux
Mac
还有,我该如何在主函数中使用这些数据?
非常感谢。
我是QT的新手,目前在试图了解如何在主函数执行之前确定操作系统。由于我对此领域完全不熟悉,因此非常需要指导。
我想要确定程序是否在以下环境中运行:
Windows
Unix
Linux
Mac
还有,我该如何在主函数中使用这些数据?
非常感谢。
您可以使用预处理器定义来确定代码编译的平台。
例如,要检查您是否在Windows上:
#if (defined (_WIN32) || defined (_WIN64))
// windows code
#endif
对于Linux:
#if (defined (LINUX) || defined (__linux__))
// linux code
#endif
...对于每个你感兴趣的平台,都要这样做。这样一来,与你的目标平台无关的代码就会被删除。
下面是一个使用这种方法的代码示例:
#include <iostream>
int main()
{
#if (defined (_WIN32) || defined (_WIN64))
std::cout << "I'm on Windows!" << std::endl;
#elif (defined (LINUX) || defined (__linux__))
std::cout << "I'm on Linux!" << std::endl;
#endif
}
这在QtGlobals中有详细的文档说明。
Q_OS_AIX
Q_OS_ANDROID
Q_OS_BSD4
Q_OS_BSDI
Q_OS_CYGWIN
Q_OS_DARWIN
Q_OS_DGUX
Q_OS_DYNIX
Q_OS_FREEBSD
Q_OS_HPUX
Q_OS_HURD
Q_OS_IOS
Q_OS_IRIX
Q_OS_LINUX
Q_OS_LYNX
Q_OS_MAC
Q_OS_NETBSD
Q_OS_OPENBSD
Q_OS_OSF
Q_OS_OSX
Q_OS_QNX
Q_OS_RELIANT
Q_OS_SCO
Q_OS_SOLARIS
Q_OS_ULTRIX
Q_OS_UNIX
Q_OS_UNIXWARE
Q_OS_WIN32
Q_OS_WIN64
Q_OS_WIN
Q_OS_WINCE
Q_OS_WINPHONE
Q_OS_WINRT
Qt本身为其支持的不同平台定义了预处理器开关。它们都类似于Q_OS_*
,其中*部分会被替换为不同的操作系统。例如:
Q_OS_WIN
、Q_OS_WIN32
或Q_OS_WIN64
(还有一些,例如Q_OS_WINCE
,但Q_OS_WIN
适用于所有类似于Windows的操作系统)Q_OS_UNIX
Q_OS_LINUX
(请注意,Q_OS_UNIX
也在Linux上定义)Q_OS_MAC
(适用于OsX和iOs)、Q_OS_OSX
或Q_OS_MACX
所有这些平台头文件都在qsystemdetection.h
中定义。该文件包含几乎所有不同支持的操作系统及其预处理器开关的列表。
-DOPERATING_SYSTEM=<...>
,并将其用于设置变量的值。enum OperatingSystem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAX};
OperatingSystem os = OPERATING_SYSTEM;
OPERATING_SYSTEM
被定义为上述之一。所有其他示例都涵盖了要点,但只是为了澄清:
#include <QtGlobal>
#include <QDebug>
enum OperatingSytem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAC};
#if (defined (Q_OS_WIN) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64))
OperatingSystem os = OS_WINDOWS;
#elif (defined (Q_OS_UNIX))
OperatingSystem os = OS_UNIX;
#elif (defined (Q_OS_LINUX))
OperatingSystem os = OS_LINUX;
#elif (defined (Q_OS_MAC))
OperatingSystem os = OS_MAC;
#endif
int main() {
switch(os) {
case OS_WINDOWS: qDebug() << "Windows"; break;
case OS_UNIX : qDebug() << "Unix"; break;
case OS_LINUX : qDebug() << "Linux"; break;
case OS_MAC : qDebug() << "Mac"; break;
default : qDebug() << "Unknown"; break;
}
}
正如其他评论中提到的那样,Unix可以在Linux上定义,因此您可能需要进行其他检查,但您真的需要知道它是Unix还是Linux吗。
'OperatingSystem'在函数int main中不是一个类型名称
和os未在此范围内声明
。 - NSPredatorOperatingSytem
,应该是 OperatingSystem
。 - NSPredator