构建插件时出现宏未定义错误

时间:2013-10-03 19:07:35

标签: c++ macos macros cross-platform

我正在开发一个插件,我需要#include一个头文件(比方说some_file.h),后者又包含environ.h。现在,当我构建我的插件时,构建失败并在environ.h文件和其他一些依赖文件中出现一些错误。以下是发生错误的environ.h代码示例:

#ifndef PLATFORM
#ifdef WIN_ENV
#define PLATFORM "winpltfm.h"
#elif __OS2__
#define PLATFORM "os2pltfm.h"
#elif defined(unix) || defined(__unix)
 #define PLATFORM "UnixPlatform.h"
#else
#error You must define the PLATFORM macro     <------- Error-1
#endif
#endif

#include PLATFORM                             <------- Error-2

错误-1是:#error you must define the platform macro,错误-2很容易猜到:Expected <filename> or "filename"

奇怪的是,包含some_file.h的其他插件工作正常,即构建成功。这让我觉得必须有一些可能不同的构建设置。

有人建议在这种情况下应该做些什么来从environ.h头文件中删除错误吗?

注意:我正在使用Xcode中的MAC OS X.

1 个答案:

答案 0 :(得分:0)

我继续对这个答案发表评论,因此更容易解释......

首先,而不是#elif __OS2__它应该是#elif defined(__OS2__),这就是为什么在您的测试期间#define __OS2__无法正常工作,但是#define __OS2__ 1

编辑:根据您的评论,您注意到environ.h是一个标准文件,但它们如何检查OS2定义似乎很奇怪。他们强迫将其定义为一个值,而不仅仅是被定义。

第二次,从您的测试中可以看出,编译器没有为您定义__OS2__,并且可能还有另一个标题,但目前不包含在翻译中选择some_file.h的单位。如果您已确认项目中的另一个头文件未定义 OS2 ,则可以按照此SO answer给出的步骤为预处理器定义宏:

  

您需要更改的构建设置称为“预处理器宏”   它可以在项目的“构建设置”选项卡中找到   设置窗格(使用搜索框查找)。选择每个目标   转到“项目设置”窗格的左侧,然后进行修改   预处理器宏设置。

     

该设置被指定为预处理器的空格分隔列表   'foo'或'foo = bar'形式的宏。

第三次,您的编译器设置中的os2pltfm.h包含路径似乎有误或缺失。

您可以按照此SO answer中的说明包含该文件:

  

您所要做的就是将-I标志添加到您的构建设置下   “其他C旗”

     

所以在你的目标的构建设置中搜索“Other C Flags”并添加   -I /路径到包括/