具体包括C++平台

C++ Platform specific includes

本文关键字:平台 C++ 包括      更新时间:2023-10-16

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

我想要这样的东西(我很清楚这行不通(

#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

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

// 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"

如果不同平台有相同的文件树,则可以在源代码中仅为include文件指定文件名,并使用依赖于平台的include目录。该目录可以通过环境变量轻松配置。

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

#ifndef MAC // MAC performs #define MAC
#ifndef WINDOWS // Windows performs #define WINDOWS
#ifndef UNIX // Unix performs #define UNIX
// ERROR
#endif
#endif
#endif

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

所以类似于:

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