0

我正在开发一个插件,在该插件中我需要一个#include头文件(比如说. 现在,当我构建插件时,构建失败,文件和其他一些依赖文件中有一些错误。这是发生错误的代码示例:some_file.henviron.henviron.henviron.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

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

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

谁能建议在这种情况下应该怎么做才能从头environ.h文件中删除错误?

注意:我正在 Xcode 中开发 MAC OS X。

4

1 回答 1

0

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

首先,而不是#elif __OS2__应该是#elif defined(__OS2__)这就是为什么在您的测试期间#define __OS2__不起作用,但#define __OS2__ 1确实如此。

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

其次,从您的测试中可以明显看出,编译器没有__OS2__为您定义,并且可能还有另一个标题,但当前未包含在接收的翻译单元中some_file.h。如果您已确认OS2不是由项目中的另一个头文件定义的,则可以按照此SO 答案给出的以下步骤为预处理器定义一个宏:

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

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

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

您可以按照此SO 答案中给出的说明包含该文件:

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

因此,在目标的构建设置中搜索“Other C Flags”并添加 -I/path-to-include/

于 2013-10-03T19:51:19.143 回答