如何使用#ifdef检查是否使用了Xlib?

时间:2017-03-06 21:28:16

标签: c++ x11

例如,您可以通过检查是否定义了“WIN32”宏来检查是否使用了Windows。我想得到相同的行为,但检查是否使用Xlib。但我不知道Xlib定义了什么来知道它的定义。 如果您不知道我的意思,这里有一个例子:

#ifdef WIN32 //Check if WIN32 is defined
//Do something
#endif

我想改变它,以便在使用Xlib时做一些事情。

如果有一些语法错误,我很抱歉,但我不是母语为英语的人。

2 个答案:

答案 0 :(得分:1)

WIN32仅在您之前包含#include <windows.h>或在编译器标志中设置宏(-DWIN32)时定义。对于Xlib,如果之前包含X_PROTOCOL,则可以使用非常相似的宏#include <X11/X.h>

#ifdef X_PROTOCOL //Check if X_PROTOCOL is defined
//Do something
#endif

如果之前包含_XLIB_H_,另一种方法是使用#include <X11/Xlib.h>,但我不会因为以下划线开头的标识符保留给实现,并且无法保证此标识符不会改变。

答案 1 :(得分:1)

  

您可以通过检查是否定义了“WIN32”宏来检查是否使用了Windows

WIN32宏默认由针对Windows操作系统的编译器定义。其目的是让程序检测Windows OS API,而不一定是任何图形子系统。

X11不是和OS。它是可选的用户态软件,可在许多操作系统(包括Windows)下安装和运行。在为Windows编译X11程序时,将定义WIN32,就像任何其他Windows程序一样。

在安装了X11的系统上,没有编译器默认定义任何内容。

如果你想在构建时检测X11,你最好的选择可能是像GNU autotools或CMake这样的元构建工具。