我怎样才能#include一个名字是从宏构建的文件?

Tim*_*ell 1 c++ c-preprocessor

在跨平台项目中,我想#include一个头文件,其名称包含平台的名称.我有一个平台的#define宏.

例如,对于

#define PLATFORM win32
Run Code Online (Sandbox Code Playgroud)

我想要

#include "engine\win32\devices_win32.h"
Run Code Online (Sandbox Code Playgroud)

而对于

#define PLATFORM linux
Run Code Online (Sandbox Code Playgroud)

我想要

#include "engine\linux\devices_linux.h"
Run Code Online (Sandbox Code Playgroud)

我要用Richard Pennington的答案,减去一行代码 - 它对我有用!

#define PLATFORM Linux
#define xstr(x) #x
#define str(x) xstr(x)
#define sub(x) x
#include str(sub(engine/PLATFORM/devices_)PLATFORM.h)
Run Code Online (Sandbox Code Playgroud)

Cha*_*via 8

通常,你会做更像的事情:

#ifdef WIN32
#include "devices_win32.h"
#endif
#ifdef LINUX
#include "devices_linux.h"
#endif
Run Code Online (Sandbox Code Playgroud)

...而不是PLATFORM根据平台可以设置不同的单一定义.