特定于C ++平台包括

时间:2013-05-14 19:14:54

标签: c++

我正在开发一个多平台项目。我想要一种简单快捷的方法来管理特定于操作系统的包含,最好不需要任何外部工具。

我想要这样的东西(我很清楚它不起作用)

#define PLATFORM_A 1
#define PLATFORM_B 2

#ifndef TARGET_PLATFORM
//ERROR
#endif

#if TARGET_PLATFORM == PLATFORM_A
    #define DIR "a"
#elif TARGET_PLATFORM == PLATFORM_B
    #define DIR "b"

#define PLATFORM_INCLUDE(file) \
    #include "platforms/" DIR "/" file

4 个答案:

答案 0 :(得分:5)

我经常看到的一个设置如下:

// platform.h

#if defined PLATFORM_A
    #include "platform_a.h"
#elif defined PLATFORM_B
    #include "platform_b.h"
#else
    // #pragma error or whatever
#endif

然后在必要时#include "platform.h"

答案 1 :(得分:3)

如果您有不同平台的相同文件树,则只能在源代码中指定包含文件的文件名,并使用平台相关包含目录。可以通过环境变量轻松配置此目录。

答案 2 :(得分:2)

您可以拥有平台本身定义的预处理程序指令。通过这种方式,您可以使用:

#ifndef MAC // MAC performs #define MAC

#ifndef WINDOWS // Windows performs #define WINDOWS

#ifndef UNIX // Unix performs #define UNIX

// ERROR

#endif

#endif

#endif

答案 3 :(得分:-1)

尝试在字符串之间使用+。这应该是C ++语法。

类似于:

#define PLATFORM_INCLUDE(file) \
    #include "platforms/" + DIR + "/" file